Skip to content

Commit 74c5440

Browse files
author
Oldani Pablo
authored
Merge pull request #10 from hackatory/riot
POST: riot js tutorial
2 parents a6b21cc + 7b4dca0 commit 74c5440

File tree

1 file changed

+131
-0
lines changed

1 file changed

+131
-0
lines changed
Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
---
2+
---
3+
4+
Estuvimos usando [RIOT][1] una librería que permite implementar
5+
componentes web de una manera muy simple.
6+
7+
La idea de RIOT es hacer componentes, o sea elementos html nuevos que sirvan
8+
propósitos específicos en las páginas que realizamos, cada componente tiene
9+
html, css y javascript integrados, de forma que se pueden reutilizar en
10+
distintos contextos.
11+
12+
Lo que vamos a hacer en este tutorial es un formulario para escribir comentario
13+
el cual nos va a mostrar en simultaneo una pre-visualización del mismo.
14+
15+
Primero vamos a necesitar incluir el compilador de riot, que como es muy
16+
liviano no es problemático, para eso, necesitamos simplemente agregar un
17+
script:
18+
19+
```html
20+
<script src="https://cdn.jsdelivr.net/npm/[email protected]/riot+compiler.min.js"></script>
21+
```
22+
23+
Este script se va a encargar de compilar todos los scripts del tipo:
24+
`riot/tag`, que es el formato en el que escribiremos nuestro componente.
25+
26+
Este archivo es muy fácil de escribir ya que la sintaxis es la misma que en
27+
html, lo que hacemos es indicar como queremos que se vea nuestro componente, el
28+
código lo guardaremos en un archivo `preview-comment.tag` con el siguiente
29+
contenido:
30+
31+
```html
32+
<preview-comment>
33+
<h3>Nuevo Commentario</h3>
34+
35+
<form>
36+
<label>Email
37+
<input type="email" name="email">
38+
</label>
39+
<label>Comentario
40+
<textarea name="comment"></textarea>
41+
</label>
42+
<input type="submit">
43+
</form>
44+
45+
<article class='preview comment'>
46+
<p>{comment}</p>
47+
</article>
48+
</preview-comment>
49+
```
50+
51+
Para usar el tag en nuestra página, necesitamos, por un lado cargar el código,
52+
por otro lado indicar dónde queremos que aparezca y por último "montarlo".
53+
54+
```html
55+
56+
<!-- cargamos el tag -->
57+
<script type="riot/tag" src="preview-comment.tag"></script>
58+
59+
<!-- indicamos dónde queremos ver el tag -->
60+
<preview-comment>
61+
</preview-comment>
62+
63+
<!-- montamos el componente -->
64+
<script>
65+
riot.mount('preview-comment')
66+
</script>
67+
```
68+
69+
Con eso debería alcanzar para que veamos el formulario, pero la
70+
previsualización todavía no anda, para hacerlo andar, vamos a necesitar agregar
71+
código javascript en nuestro tag y modificar el campo de comentario, para
72+
poder referenciarlo.
73+
74+
```html
75+
<textarea name="comment" ref='comentario' onKeyPress={cambioComentario}></textarea>
76+
77+
<script>
78+
this.cambioComentario = function (evt) {
79+
let nueva_letra = String.fromCharCode(evt.charCode)
80+
this.comment = this.refs.comentario.value + nueva_letra
81+
}
82+
</script>
83+
```
84+
85+
De esta manera, cuando el usuario escribe algo en el campo comentario, automaticamente ese cambio se ve reflejado en la pre-visualización.
86+
87+
También podemos mostrar el avatar del usuario de manera automática,
88+
utilizando gravatar, para lo cual necesitaremos agregar una librería javascript:
89+
90+
<script src="https://cdnjs.cloudflare.com/ajax/libs/blueimp-md5/2.7.0/js/md5.min.js"></script>
91+
92+
Una vez que agregamos esta librería en nuestra página, podemos modificar el
93+
agregar la imagen del avatar con el siguiente código:
94+
95+
<img src="//www.gravatar.com/avatar/{gravatar_id}.jpg">
96+
97+
<script>
98+
this.cambioEmail = function () {
99+
this.gravatar_id = md5(this.refs.email.value)
100+
}
101+
</script>
102+
103+
De este modo, cuando el usuario ingresa su email, ve su imagen de perfil (si está cargada en gravatar) al lado de su comentario.
104+
105+
Por último, solo resta agregar algunos estilos en nuestro nuevo tag.
106+
107+
108+
```html
109+
<style>
110+
label, input, textarea {
111+
display: block;
112+
}
113+
114+
.preview {
115+
background-color: grey;
116+
width: 300px;
117+
min-height: 100px;
118+
border-radius: 15px;
119+
}
120+
121+
.preview img {
122+
margin: 10px;
123+
border-radius: 50%;
124+
float: left;
125+
}
126+
</style>
127+
```
128+
129+
Con este código ya deberíamos tener nuestro primer elemento funcionando.
130+
131+
[1]: http://riotjs.com/

0 commit comments

Comments
 (0)