Skip to content

Commit c548e36

Browse files
authored
Merge #533 from javascript-tutorial/sync-ef8d5768
Sync with upstream @ ef8d576 *nevermore*
2 parents 519443b + 2bb6141 commit c548e36

File tree

15 files changed

+142
-60
lines changed

15 files changed

+142
-60
lines changed

1-js/02-first-steps/04-variables/article.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ Ahora podemos introducir datos en ella al utilizar el operador de asignación `=
2424
let message;
2525

2626
*!*
27-
message = 'Hola'; // almacena la cadena
27+
message = 'Hola'; // almacenar la cadena 'Hola' en la variable llamada message
2828
*/!*
2929
```
3030

1-js/04-object-basics/06-constructor-new/1-two-functions-one-object/task.md

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

55
# Dos funciones – un objeto
66

7-
Es posible crear las funciones `A` y `B` como `new A()==new B()`?
7+
¿Es posible crear las funciones `A` y `B` para que se cumpla `new A() == new B()`?
88

99
```js no-beautify
1010
function A() { ... }

1-js/05-data-types/05-array-methods/12-reduce-object/task.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ importance: 4
44

55
# Crea un objeto a partir de un array
66

7-
Supongamos que recibimos un array de usuarios con la forma `{id:..., name:..., age... }`.
7+
Supongamos que recibimos un array de usuarios con la forma `{id:..., name:..., age:... }`.
88

99
Crea una función `groupById(arr)` que cree un objeto, con `id` como clave (key) y los elementos del array como valores.
1010

1-js/07-object-properties/01-property-descriptors/article.md

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ alert(Object.keys(user)); // name
194194

195195
Los indicadores no configurables (`configurable:false`) a veces es un preajuste para los objetos propiedades incorporadas.
196196

197-
Una propiedad no configurable no puede ser eliminada ni cambiada por `defineProperty`.
197+
Una propiedad no configurable no puede ser eliminada, sus atributos no pueden ser modificados.
198198

199199
Por ejemplo, `Math.PI` es de solo lectura, no enumerable y no configurable:
200200

@@ -214,20 +214,23 @@ alert( JSON.stringify(descriptor, null, 2 ) );
214214
Así que, un programador es incapaz de cambiar el valor de `Math.PI` o sobrescribirlo.
215215

216216
```js run
217-
Math.PI = 3; // Error
217+
Math.PI = 3; // Error, porque tiene writable: false
218218

219219
// delete Math.PI tampoco funcionará
220220
```
221221

222-
Convertir una propiedad en no configurable es hacer una calle de una vía. No podremos cambiarla de vuelta, porque `defineProperty` no funciona en propiedades no configurables.
222+
Tampoco podemos cambiar `Math.PI`a `writable` de vuelta:
223223

224-
Para ser precisos, la no configurabilidad impone varias restricciones a `defineProperty`:
225-
1. No se puede cambiar el indicador `configurable`.
226-
2. No se puede cambiar el indicador `enumerable`.
227-
3. No se puede cambiar `writable: false` a `true` (al revés funciona).
228-
4. No se puede cambiar `get/set` por una propiedad accesoria (pero puede asignarlos si está ausente).
224+
```js run
225+
// Error, porque configurable: false
226+
Object.defineProperty(Math, "PI", { writable: true });
227+
```
228+
229+
No hay nada en absoluto que podamos hacer con `Math.PI`.
229230

230-
**La idea de "configurable: false" es prevenir cambios en los indicadores de la propiedad y su eliminación mientras que permite el cambio de su valor.**
231+
Convertir una propiedad en no configurable es una calle de un solo sentido. No podremos cambiarla de vuelta con `defineProperty`.
232+
233+
**Nota que "configurable: false" impide cambios en los indicadores de la propiedad y su eliminación, pero permite el cambio de su valor.**
231234

232235
Aquí `user.name` es "non-configurable", pero aún puede cambiarse (por ser "writable"):
233236

@@ -244,7 +247,7 @@ user.name = "Pete"; // funciona
244247
delete user.name; // Error
245248
```
246249

247-
Y aquí hacemos `user.name` una constante "sellada para siempre":
250+
Y aquí hacemos `user.name` una constante "sellada para siempre", tal como la incorporada `Math.PI`:
248251

249252
```js run
250253
let user = {
@@ -263,6 +266,11 @@ delete user.name;
263266
Object.defineProperty(user, "name", { value: "Pedro" });
264267
```
265268

269+
```smart header="Único cambio de atributo posible: writable true -> false"
270+
Hay una excepción menor acerca del cambio de indicadores.
271+
272+
Podemos cambiar `writable: true` a `false` en una propiedad no configurable, impidiendo en más la modificación de su valor (sumando una capa de protección). Aunque no hay vuelta atrás.
273+
```
266274

267275
## Object.defineProperties
268276

2-ui/3-event-details/6-pointer-events/article.md

Lines changed: 73 additions & 37 deletions
Large diffs are not rendered by default.
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<!DOCTYPE html>
2+
<link rel="stylesheet" href="style.css">
3+
4+
<div id="slider" class="slider">
5+
<div class="thumb"></div>
6+
</div>
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
.slider {
2+
border-radius: 5px;
3+
background: #E0E0E0;
4+
background: linear-gradient(left top, #E0E0E0, #EEEEEE);
5+
width: 310px;
6+
height: 15px;
7+
margin: 5px;
8+
}
9+
10+
.thumb {
11+
width: 10px;
12+
height: 25px;
13+
border-radius: 3px;
14+
position: relative;
15+
left: 10px;
16+
top: -5px;
17+
background: blue;
18+
cursor: pointer;
19+
}

2-ui/3-event-details/6-pointer-events/slider.view/index.html

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,30 @@
55
<div class="thumb"></div>
66
</div>
77

8+
<p style="border:1px solid gray" onmousemove="this.textContent = new Date()">Mouse over here to see the date</p>
9+
810
<script>
911
let thumb = slider.querySelector('.thumb');
1012
let shiftX;
1113

12-
thumb.onpointerdown = function(event) {
14+
function onThumbDown(event) {
1315
event.preventDefault(); // prevent selection start (browser action)
1416

1517
shiftX = event.clientX - thumb.getBoundingClientRect().left;
1618

1719
thumb.setPointerCapture(event.pointerId);
20+
21+
thumb.onpointermove = onThumbMove;
22+
23+
thumb.onpointerup = event => {
24+
// dragging finished, no need to track pointer any more
25+
// ...any other "drag end" logic here...
26+
thumb.onpointermove = null;
27+
thumb.onpointerup = null;
28+
}
1829
};
1930

20-
thumb.onpointermove = function(event) {
31+
function onThumbMove(event) {
2132
let newLeft = event.clientX - shiftX - slider.getBoundingClientRect().left;
2233

2334
// if the pointer is out of slider => adjust left to be within the bounaries
@@ -32,6 +43,8 @@
3243
thumb.style.left = newLeft + 'px';
3344
};
3445

46+
thumb.onpointerdown = onThumbDown;
47+
3548
thumb.ondragstart = () => false;
3649

3750
</script>

2-ui/5-loading/01-onload-ondomcontentloaded/article.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
El ciclo de vida de una página HTML tiene tres eventos importantes:
44

55
- `DOMContentLoaded` -- el navegador HTML está completamente cargado y el árbol DOM está construido, pero es posible que los recursos externos como `<img>` y hojas de estilo aún no se hayan cargado.
6-
- `load` -- no solo se carga el HTML, sino también todos los recursos externos: imágenes, estilos, etc.
6+
- `load` -- no solo se cargó el HTML, sino también todos los recursos externos: imágenes, estilos, etc.
77
- `beforeunload/unload` -- el usuario sale de la pagina.
88

99
Cada evento puede ser útil:
@@ -114,7 +114,7 @@ El siguiente ejemplo muestra correctamente los tamaños de las imágenes, porque
114114

115115
```html run height=200 refresh
116116
<script>
117-
window.onload = function() { // similar a window.addEventListener('load', (event) => {
117+
window.onload = function() { // también puede usar window.addEventListener('load', (event) => {
118118
alert('Página cargada');
119119
120120
// la imagen es cargada al mismo tiempo

5-network/02-formdata/article.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ El servidor lee el formulario `form-data` y el archivo tal como si de un formula
168168

169169
Los objetos [FormData](https://xhr.spec.whatwg.org/#interface-formdata) son utilizados para capturar un formulario HTML y enviarlo utilizando `fetch` u otro método de red.
170170

171-
Podemos crear el objeto con `new FormData(form)` desde un formulario HTML, o crearlo sin un formulario en absoluto, y agregar los campos con los siguientes métodos:
171+
Podemos crear el objeto con `new FormData(form)` desde un formulario HTML, o crear un objeto sin un formulario en absoluto y agregar los campos con los siguientes métodos:
172172

173173
- `formData.append(nombre, valor)`
174174
- `formData.append(nombre, blob, nombreDeArchivo)`

5-network/03-fetch-progress/article.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ El método `fetch` permite rastrear el progreso de *descarga*.
55

66
Ten en cuenta: actualmente no hay forma de que `fetch` rastree el progreso de *carga*. Para ese propósito, utiliza [XMLHttpRequest](info:xmlhttprequest), lo cubriremos más adelante.
77

8-
Para rastrear el progreso de la descarga, podemos usar la propiedad `response.body`. Esta propiedad es un `ReadableStream`, un objeto especial que proporciona el cuerpo fragmento a fragmento, tal como viene. Las transmisiones legibles se describen en la especificación de la [API de transmisiones](https://streams.spec.whatwg.org/#rs-class).
8+
Para rastrear el progreso de la descarga, podemos usar la propiedad `response.body`. Esta propiedad es un `ReadableStream`, un objeto especial que proporciona la transmisión del cuerpo fragmento a fragmento tal como viene. Estas se describen en la especificación de la [API de transmisiones](https://streams.spec.whatwg.org/#rs-class).
99

1010
A diferencia de `response.text()`, `response.json()` y otros métodos, `response.body` da control total sobre el proceso de lectura, y podemos contar cuánto se consume en cualquier momento.
1111

5-network/06-fetch-api/article.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ Esta opción puede ser útil cuando la URL de `fetch` proviene de un tercero y q
147147
La opción `credentials` especifica si `fetch` debe enviar cookies y encabezados de autorización HTTP con la solicitud.
148148
149149
- **`"same-origin"`** -- el valor predeterminado, no enviar solicitudes cross-origin,
150-
- **`"include"`** -- enviar siempre, requiere `Accept-Control-Allow-Credentials` del servidor cross-origin para que JavaScript acceda a la respuesta, que se cubrió en el capítulo <info:fetch-crossorigin>,
150+
- **`"include"`** -- enviar siempre, requiere `Access-Control-Allow-Credentials` del servidor cross-origin para que JavaScript acceda a la respuesta, que se cubrió en el capítulo <info:fetch-crossorigin>,
151151
- **`"omit"`** -- nunca enviar, incluso para solicitudes del mismo origen.
152152
153153
## cache

6-data-storage/02-localstorage/article.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ Si ambas ventanas están escuchando el evento `window.onstorage`, cada una reacc
200200

201201
```js run
202202
// se dispara en actualizaciones hechas en el mismo almacenaje, desde otros documentos
203-
window.onstorage = event => { // igual que en window.addEventListener('storage', event => {
203+
window.onstorage = event => { // también puede usar window.addEventListener('storage', event => {
204204
if (event.key != 'now') return;
205205
alert(event.key + ':' + event.newValue + " at " + event.url);
206206
};

6-data-storage/03-indexeddb/article.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ let deleteRequest = indexedDB.deleteDatabase(name)
106106
// deleteRequest.onsuccess/onerror tracks the result
107107
```
108108

109-
```warn header="We can't open an older version of the database"
109+
```warn header="We can't open a database using an older open call version"
110110
If the current user database has a higher version than in the `open` call, e.g. the existing DB version is `3`, and we try to `open(...2)`, then that's an error, `openRequest.onerror` triggers.
111111
112112
That's rare, but such a thing may happen when a visitor loads outdated JavaScript code, e.g. from a proxy cache. So the code is old, but his database is new.

8-web-components/1-webcomponents-intro/article.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ La Estación Espacial Internacional:
2828

2929
¿Cómo se crean dispositivos tan complejos?
3030

31-
¿Qué principios podríamos tomar prestados para que nuestro desarrollo sea fiable y escalable al mismo nivel? O, por lo menos, cerca de él.
31+
¿Qué principios podríamos tomar prestados para que nuestro desarrollo sea fiable y escalablea a ese nivel? ¿O, al menos, cerca de él?
3232

3333
## Arquitectura de componentes
3434

0 commit comments

Comments
 (0)