Skip to content

Commit cba6d4b

Browse files
authored
Merge pull request #556 from joaquinelio/susy211011
Susy211011
2 parents db93a49 + a52e26a commit cba6d4b

10 files changed

Lines changed: 50 additions & 32 deletions

File tree

1-js/01-getting-started/1-intro/article.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,11 @@ El navegador tiene un motor embebido a veces llamado una "Máquina virtual de Ja
2424

2525
Diferentes motores tienen diferentes "nombres en clave". Por ejemplo:
2626

27-
- [V8](https://es.wikipedia.org/wiki/Chrome_V8) -- en Chrome y Opera.
27+
- [V8](https://es.wikipedia.org/wiki/Chrome_V8) -- en Chrome, Opera y Edge.
2828
- [SpiderMonkey](https://es.wikipedia.org/wiki/SpiderMonkey) -- en Firefox.
2929
- ...Existen otros nombres en clave como "Chakra" para IE , "JavaScriptCore", "Nitro" y "SquirrelFish" para Safari, etc.
3030

31-
Los términos anteriores es bueno recordarlos porque son usados en artículos para desarrolladores en internet. También los usaremos. Por ejemplo, si "la característica X es soportada por V8", entonces probablemente funciona en Chrome y Opera.
31+
Es bueno recordar estos términos porque son usados en artículos para desarrolladores en internet. También los usaremos. Por ejemplo, si "la característica X es soportada por V8", entonces probablemente funciona en Chrome, Opera y Edge.
3232

3333
```smart header="¿Como trabajan los motores?"
3434

1-js/01-getting-started/3-code-editors/article.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ En la práctica, los editores livianos pueden tener montones de plugins incluyen
3131

3232
Las siguientes opciones merecen tu atención:
3333

34-
- [Visual Studio Code](https://code.visualstudio.com/) (multiplataforma, gratuito)
3534
- [Atom](https://atom.io/) (multiplataforma, gratuito).
3635
- [Sublime Text](http://www.sublimetext.com) (multiplataforma, shareware).
3736
- [Notepad++](https://notepad-plus-plus.org/) (Windows, gratuito).

1-js/02-first-steps/09-comparison/article.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ En Javascript se escriben así:
66

77
- Mayor/menor que: <code>a &gt; b</code>, <code>a &lt; b</code>.
88
- Mayor/menor o igual que: <code>a &gt;= b</code>, <code>a &lt;= b</code>.
9-
- Igual: `a == b` (ten en cuenta el doble signo `==`. Un solo símbolo `a = b` significaría una asignación).
9+
- Igual: `a == b` (ten en cuenta que el doble signo `==` significa comparación, mientras que un solo símbolo `a = b` significaría una asignación).
1010
- Distinto. En matemáticas la notación es <code>&ne;</code>, pero en JavaScript se escribe como una asignación con un signo de exclamación delante: <code>a != b</code>.
1111

1212
En este artículo, aprenderemos más sobre los diferentes tipos de comparaciones y de cómo las realiza JavaScript, incluidas las peculiaridades importantes.

1-js/02-first-steps/11-logical-operators/article.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ Otra característica de OR || operador es la evaluación de "el camino más cort
123123

124124
Esto significa que `||` procesa sus argumentos hasta que se alcanza el primer valor verdadero, y luego el valor se devuelve inmediatamente, sin siquiera tocar el otro argumento.
125125

126-
La importancia de esta característica se vuelve obvia si un operando no es solo un valor, sino una expresión con un efecto secundario, como una asignación de variable o una llamada a función.
126+
La importancia de esta característica se vuelve obvia si un operando no es solo un valor, sino una expresión con un efecto secundario, como una asignación de variable o una llamada a función.
127127

128128
En el siguiente ejemplo, solo se imprime el segundo mensaje:
129129

1-js/03-code-quality/02-coding-style/article.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -301,9 +301,9 @@ Lo mejor de ellos es que la comprobación de estilo también puede encontrar alg
301301
302302
Aquí hay algunas herramientas de linting conocidas:
303303
304-
- [JSLint](http://www.jslint.com/) -- uno de los primeros linters.
305-
- [JSHint](http://www.jshint.com/) -- mas ajustes que JSLint.
306-
- [ESLint](http://eslint.org/) -- probablemente el mas reciente.
304+
- [JSLint](https://www.jslint.com/) -- uno de los primeros linters.
305+
- [JSHint](https://www.jshint.com/) -- más ajustes que JSLint.
306+
- [ESLint](https://eslint.org/) -- probablemente el más reciente.
307307
308308
Todos ellos pueden hacer el trabajo. El autor usa [ESLint](http://eslint.org/).
309309
@@ -335,7 +335,7 @@ Aquí un ejemplo de un archivo `.eslintrc`:
335335
336336
Aquí la directiva `"extends"` denota que la configuración se basa en el conjunto de configuraciones "eslint: recomendado". Después de eso, especificamos el nuestro.
337337
338-
También es posible descargar conjuntos de reglas de estilo de la web y extenderlos en su lugar. Consulte <http://eslint.org/docs/user-guide/getting-started> para obtener más detalles sobre la instalación.
338+
También es posible descargar conjuntos de reglas de estilo de la web y extenderlos. Consulte <https://eslint.org/docs/user-guide/getting-started> para obtener más detalles sobre la instalación.
339339
340340
También algunos IDE tienen linting incorporado, lo cual es conveniente pero no tan personalizable como ESLint.
341341

1-js/05-data-types/01-primitives-methods/article.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ La solución es algo enrevesada, pero aquí está:
4848
2. El lenguaje permite el acceso a métodos y propiedades de strings, numbers, booleans y symbols.
4949
3. Para que esto funcione, se crea una envoltura especial, un "object wrapper" (objeto envoltorio) que provee la funcionalidad extra y luego es destruido.
5050

51-
Los "object wrappers" son diferentes para cada primitivo y son llamados: `String`, `Number`, `Boolean` y `Symbol`. Así, proveen diferentes sets de métodos.
51+
Los "object wrappers" son diferentes para cada primitivo y son llamados: `String`, `Number`, `Boolean`, `Symbol` y `BigInt`. Así, proveen diferentes sets de métodos.
5252

5353
Por ejemplo, existe un método [str.toUpperCase()](https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/String/toUpperCase) que devuelve un string en mayúsculas.
5454

1-js/11-async/03-promise-chaining/article.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,19 +32,19 @@ new Promise(function(resolve, reject) {
3232
});
3333
```
3434

35-
La idea es que el resultado pase a través de la cadena de controladores `.then`.
35+
La idea es que el resultado pase a través de la cadena de manejadores `.then`.
3636

3737
Aquí el flujo es:
3838
1. La promesa inicial se resuelve en 1 segundo `(*)`,
39-
2. Entonces se llama el controlador `.then` `(**) `.
40-
3. El valor que devuelve se pasa al siguiente controlador `.then` `(***)`
41-
4. ...y así.
39+
2. Entonces se llama el manejador `.then` `(**) `, que a su vez crea una nueva promesa (resuelta con el valor `2`).
40+
3. El siguiente `.then` `(***)` obtiene el resultado del anterior, lo procesa (duplica) y lo pasa al siguiente manejador.
41+
4. ...y así sucesivamente.
4242

4343
A medida que el resultado se pasa a lo largo de la cadena de controladores, podemos ver una secuencia de llamadas de alerta: `1` -> `2` -> `4`.
4444

4545
![](promise-then-chain.svg)
4646

47-
Todo funciona, porque una llamada a `promise.then` devuelve una promesa, para que podamos llamar al siguiente `.then`.
47+
Todo funciona, porque cada llamada a `promise.then` devuelve una nueva promesa, para que podamos llamar al siguiente `.then` con ella.
4848

4949
Cuando un controlador devuelve un valor, se convierte en el resultado de esa promesa, por lo que se llama al siguiente `.then`.
5050

2-ui/4-forms-controls/3-events-change-input/article.md

Lines changed: 34 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -58,38 +58,57 @@ Por lo tanto no podemos usar `event.preventDefault()` aquí, es demasiado tarde
5858

5959
Estos eventos ocurren al cortar/copiar/pegar un valor.
6060

61-
Estos pertenecen a la clase [ClipboardEvent](https://www.w3.org/TR/clipboard-apis/#clipboard-event-interfaces) y dan acceso a los datos copiados/pegados.
61+
Estos pertenecen a la clase [ClipboardEvent](https://www.w3.org/TR/clipboard-apis/#clipboard-event-interfaces) y dan acceso a los datos cortados/copiados/pegados.
6262

63-
Podemos usar `event.preventDefault()` para cancelar la acción y que nada sea copiado/pegado.
63+
También podemos usar `event.preventDefault()` para cancelar la acción y que nada sea cortado/copiado/pegado.
6464

65-
El siguiente código también evita tales eventos y muestra qué es los que estamos intentando cortar/copiar/pegar:
65+
El siguiente código también evita todo evento `cut/copy/paste` y muestra qué es los que estamos intentando cortar/copiar/pegar:
6666

6767
```html autorun height=40 run
6868
<input type="text" id="input">
6969
<script>
70-
input.oncut = input.oncopy = input.onpaste = function(event) {
71-
alert(event.type + ' - ' + event.clipboardData.getData('text/plain'));
72-
return false;
70+
input.onpaste = function(event) {
71+
alert("paste: " + event.clipboardData.getData('text/plain'));
72+
event.preventDefault();
73+
};
74+
75+
input.oncut = input.oncopy = function(event) {
76+
alert(event.type + '-' + document.getSelection());
77+
event.preventDefault();
7378
};
7479
</script>
7580
```
7681

77-
Ten en cuenta que no solo es posible copiar/pegar texto, sino cualquier cosa. Por ejemplo, podemos copiar un archivo en el gestor de archivos del SO y pegarlo.
82+
Nota que dentro de los manejadores `cut` y `copy`, llamar a `event.clipboardData.getData(...)` devuelve un string vacío. Esto es porque el dato no está en el portapapeles aún. Y si usamos `event.preventDefault()` no será copiado en absoluto.
7883

79-
Esto es porque `clipboardData` implementa la interfaz `DataTransfer`, usada comúnmente para "arrastrar y soltar" y "copiar y pegar". Ahora esto está fuera de nuestro objetivo, pero puedes encontrar sus métodos [en la especificación](https://html.spec.whatwg.org/multipage/dnd.html#the-datatransfer-interface).
84+
Por ello el ejemplo arriba usa `document.getSelection()` para obtener el texto seleccionado. Puedes encontrar más detalles acerca de selección en el artículo <info:selection-range>.
8085

81-
```warn header="ClipboardAPI: restricciones para seguridad del usuario"
82-
El portapapeles es algo a nivel "global" del SO. Por cuestiones de seguridad, la mayoría de los navegadores dan acceso al portapapeles solamente bajo determinadas acciones del usuario, por ejemplo al manejar eventos `onclick`.
86+
No solo es posible copiar/pegar texto, sino cualquier cosa. Por ejemplo, podemos copiar un archivo en el gestor de archivos del SO y pegarlo.
8387

84-
Además está prohibido generar eventos "personalizados" del portapapeles con `dispatchEvent` en todos los navegadores excepto Firefox.
85-
```
88+
Esto es porque `clipboardData` implementa la interfaz `DataTransfer`, usada comúnmente para "arrastrar y soltar" y "copiar y pegar". Ahora esto está fuera de nuestro objetivo, pero puedes encontrar sus métodos [en la especificación DataTransfer](https://html.spec.whatwg.org/multipage/dnd.html#the-datatransfer-interface).
89+
90+
Hay además una API asincrónica adicional para acceso al portapapeles: `navigator.clipboard`. Más en la especificación [Clipboard API and events](https://www.w3.org/TR/clipboard-apis/), [no soportado en Firefox](https://caniuse.com/async-clipboard).
91+
92+
### Restricciones de seguridad
93+
94+
El portapapeles es algo a nivel "global" del SO. Un usuario puede alternar entre ventanas, copiar y pegar diferentes cosas, y el navegador no debería ver todo eso.
95+
96+
Por ello la mayoría de los navegadores dan acceso al portapapeles únicamente bajo determinadas acciones del usuario, como copiar y pegar.
97+
98+
Está prohibido generar eventos "personalizados" del portapapeles con `dispatchEvent` en todos los navegadores excepto Firefox. Incluso si logramos enviar tal evento, la especificación establece que tal evento "sintético" no debe brindar acceso al portapapeles.
99+
100+
Incluso si alguien decide guardar `event.clipboardData` en un manejador de evento para accederlo luego, esto no funcionará.
101+
102+
Para reiterar, [event.clipboardData](https://www.w3.org/TR/clipboard-apis/#clipboardevent-clipboarddata) funciona únicamente en el contexto de manejadores de eventos iniciados por el usuario.
103+
104+
Por otro lado, [navigator.clipboard](https://www.w3.org/TR/clipboard-apis/#h-navigator-clipboard) es una API más reciente, pensada para el uso en cualquier contexto. Esta pide autorización al usuario cuando la necesita. No soportada en Firefox.
86105

87106
## Resumen
88107

89108
Eventos de modificación de datos:
90109

91110
| Evento | Descripción | Especiales |
92111
|---------|----------|-------------|
93-
| `change`| Un valor fue cambiado. | Para ingreso de texto, ocurre al perderse el enfoque |
94-
| `input` | Para entrada de texto en cada cambio | Ocurre inmediatamente a diferencia de `change`. |
95-
| `cut/copy/paste` | Acciones cortar/copiar/pegar | La acción puede ser cancelada. La propiedad `event.clipboardData` brinda acceso a leer/escribir del portapeles. |
112+
| `change`| Un valor fue cambiado. | En ingreso de texto, se dispara cuando el elemento pierde el foco |
113+
| `input` | Cada cambio de entrada de texto | Se dispara de inmediato con cada cambio, a diferencia de `change`. |
114+
| `cut/copy/paste` | Acciones cortar/copiar/pegar | La acción puede ser cancelada. La propiedad `event.clipboardData` brinda acceso al portapeles. Todos los navegadores excepto Firefox también soportan `navigator.clipboard`. |

2-ui/5-loading/02-script-async-defer/article.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ En la práctica, `defer` es usado para scripts que necesitan todo el DOM y/o el
193193
Y `async` es usado para scripts independientes, como contadores y anuncios donde el orden de ejecución no importa.
194194

195195
```warn header="La página sin scripts debe ser utilizable"
196-
Por favor ten en cuenta que si estas usando `defer` o `async`, el usuario verá la página antes de que el script sea cargado.
196+
Ten en cuenta: si usas `defer` o `async`, el usuario verá la página *antes* de que el script sea cargado.
197197
198198
En tal caso algunos componentes gráficos probablemente no estén listos.
199199

4-binary/02-text-decoder/article.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
¿Qué pasa si los datos binarios son en realidad un string? Por ejemplo, recibimos un archivo con datos textuales.
44

5-
El objeto incorporado [TextDecoder](https://encoding.spec.whatwg.org/#interface-textdecoder) nos permite leer el texto de un conjunto de datos binarios y convertirlo en un dato de tipo string de JavaScript, dados el búfer y la codificación.
5+
El objeto incorporado [TextDecoder](https://encoding.spec.whatwg.org/#interface-textdecoder) nos permite leer el valor y convertirlo en un string de JavaScript, dados el búfer y la codificación.
66

77
Primero necesitamos crearlo:
88
```js

0 commit comments

Comments
 (0)