Skip to content
Merged
Changes from 1 commit
Commits
Show all changes
71 commits
Select commit Hold shift + click to select a range
b5e3cc5
Merge pull request #3 from javascript-tutorial/master
Jul 21, 2020
53e75b5
Merge pull request #4 from javascript-tutorial/master
Jul 23, 2020
d5ea01b
Merge pull request #5 from javascript-tutorial/master
Jul 25, 2020
cde00e0
Merge pull request #6 from javascript-tutorial/master
Jul 25, 2020
81e9cfd
Merge pull request #7 from javascript-tutorial/master
Jul 29, 2020
5402692
Update (#8)
Jul 31, 2020
16ccddf
Merge pull request #9 from javascript-tutorial/master
Aug 1, 2020
707db67
Update (#10)
Aug 2, 2020
5d7a154
Update (#11)
Aug 5, 2020
8c26be9
Merge pull request #13 from javascript-tutorial/master
Aug 5, 2020
371af05
Merge pull request #14 from javascript-tutorial/master
Aug 6, 2020
281ce34
Merge pull request #15 from javascript-tutorial/master
Aug 7, 2020
9328be8
Merge pull request #16 from javascript-tutorial/master
Aug 9, 2020
8210b40
Merge pull request #17 from javascript-tutorial/master
Aug 11, 2020
9c9f628
Merge pull request #18 from javascript-tutorial/master
Aug 13, 2020
c2728b4
Add files via upload
Aug 14, 2020
c1c77b6
Update task.md
Aug 14, 2020
712ee25
Update index.html
Aug 14, 2020
daa4e2e
Update 2-ui/1-document/11-coordinates/1-find-point-coordinates/soluti…
Aug 15, 2020
18c86b5
Apply suggestions from code review
Aug 15, 2020
2d26388
Update task.md
Aug 15, 2020
a0ce03f
Update 2-ui/1-document/11-coordinates/2-position-at/solution.md
vplentinax Aug 31, 2020
6ed3ab8
Update 2-ui/1-document/11-coordinates/1-find-point-coordinates/task.md
vplentinax Aug 31, 2020
173b33f
Update 2-ui/1-document/11-coordinates/1-find-point-coordinates/soluti…
vplentinax Aug 31, 2020
8b8edce
Update 2-ui/1-document/11-coordinates/1-find-point-coordinates/soluti…
vplentinax Aug 31, 2020
81f71b7
Update 2-ui/1-document/11-coordinates/1-find-point-coordinates/soluti…
vplentinax Aug 31, 2020
55f258c
Update 2-ui/1-document/11-coordinates/article.md
vplentinax Aug 31, 2020
f3ea4b2
Update 2-ui/1-document/11-coordinates/article.md
vplentinax Aug 31, 2020
22c83e8
Update 2-ui/1-document/11-coordinates/article.md
vplentinax Aug 31, 2020
e7c72a8
Update 2-ui/1-document/11-coordinates/article.md
vplentinax Aug 31, 2020
ce8912d
Update 2-ui/1-document/11-coordinates/article.md
vplentinax Aug 31, 2020
29f6934
Update 2-ui/1-document/11-coordinates/1-find-point-coordinates/soluti…
vplentinax Aug 31, 2020
e80f5e5
Update 2-ui/1-document/11-coordinates/1-find-point-coordinates/task.md
vplentinax Aug 31, 2020
a2b9c18
Update 2-ui/1-document/11-coordinates/2-position-at/solution.view/ind…
vplentinax Aug 31, 2020
84a0b84
Update 2-ui/1-document/11-coordinates/2-position-at/solution.view/ind…
vplentinax Aug 31, 2020
258d32d
Update 2-ui/1-document/11-coordinates/2-position-at/solution.view/ind…
vplentinax Aug 31, 2020
37eeb35
Update 2-ui/1-document/11-coordinates/2-position-at/solution.view/ind…
vplentinax Aug 31, 2020
7890137
Update 2-ui/1-document/11-coordinates/2-position-at/solution.view/ind…
vplentinax Aug 31, 2020
c3b1668
Update 2-ui/1-document/11-coordinates/2-position-at/solution.view/ind…
vplentinax Aug 31, 2020
066cff9
Update 2-ui/1-document/11-coordinates/2-position-at/solution.view/ind…
vplentinax Aug 31, 2020
7357d41
Update 2-ui/1-document/11-coordinates/2-position-at/solution.view/ind…
vplentinax Aug 31, 2020
625dbad
Update 2-ui/1-document/11-coordinates/2-position-at/solution.view/ind…
vplentinax Aug 31, 2020
c22725f
Update 2-ui/1-document/11-coordinates/2-position-at/source.view/index…
vplentinax Aug 31, 2020
1fe6863
Update 2-ui/1-document/11-coordinates/2-position-at/source.view/index…
vplentinax Aug 31, 2020
28628fa
Update 2-ui/1-document/11-coordinates/2-position-at/source.view/index…
vplentinax Aug 31, 2020
28bab5c
Update 2-ui/1-document/11-coordinates/2-position-at/source.view/index…
vplentinax Aug 31, 2020
c7c75cf
Update 2-ui/1-document/11-coordinates/2-position-at/source.view/index…
vplentinax Aug 31, 2020
130c8b4
Update 2-ui/1-document/11-coordinates/2-position-at/source.view/index…
vplentinax Aug 31, 2020
4c6ed4d
Update 2-ui/1-document/11-coordinates/2-position-at/source.view/index…
vplentinax Aug 31, 2020
952d4cf
Update 2-ui/1-document/11-coordinates/2-position-at/source.view/index…
vplentinax Aug 31, 2020
491a080
Update 2-ui/1-document/11-coordinates/3-position-at-absolute/solution…
vplentinax Aug 31, 2020
1bc20bd
Update 2-ui/1-document/11-coordinates/3-position-at-absolute/solution…
vplentinax Aug 31, 2020
861b2e9
Update 2-ui/1-document/11-coordinates/3-position-at-absolute/solution…
vplentinax Aug 31, 2020
1141d1c
Update 2-ui/1-document/11-coordinates/3-position-at-absolute/solution…
vplentinax Aug 31, 2020
454ac36
Update 2-ui/1-document/11-coordinates/3-position-at-absolute/solution…
vplentinax Aug 31, 2020
de345d5
Update 2-ui/1-document/11-coordinates/3-position-at-absolute/solution…
vplentinax Aug 31, 2020
4c9f381
Update 2-ui/1-document/11-coordinates/3-position-at-absolute/solution…
vplentinax Aug 31, 2020
dc59ce6
Update 2-ui/1-document/11-coordinates/4-position-inside-absolute/solu…
vplentinax Aug 31, 2020
1a823bb
Update 2-ui/1-document/11-coordinates/4-position-inside-absolute/solu…
vplentinax Aug 31, 2020
2015eae
Update 2-ui/1-document/11-coordinates/4-position-inside-absolute/solu…
vplentinax Aug 31, 2020
f15a998
Update 2-ui/1-document/11-coordinates/4-position-inside-absolute/solu…
vplentinax Aug 31, 2020
ac0230b
Update 2-ui/1-document/11-coordinates/4-position-inside-absolute/solu…
vplentinax Aug 31, 2020
ab22501
Update 2-ui/1-document/11-coordinates/4-position-inside-absolute/solu…
vplentinax Aug 31, 2020
c1a5d4e
Update 2-ui/1-document/11-coordinates/4-position-inside-absolute/solu…
vplentinax Aug 31, 2020
dc115cc
Update 2-ui/1-document/11-coordinates/4-position-inside-absolute/solu…
vplentinax Aug 31, 2020
082548e
Update 2-ui/1-document/11-coordinates/4-position-inside-absolute/task.md
vplentinax Aug 31, 2020
49a83d5
Update 2-ui/1-document/11-coordinates/article.md
vplentinax Aug 31, 2020
3ac35a1
Update 2-ui/1-document/11-coordinates/article.md
vplentinax Aug 31, 2020
51e697a
Merge branch 'master' into coordinates
EzequielCaste Aug 31, 2020
8629435
Update 2-ui/1-document/11-coordinates/2-position-at/solution.view/ind…
EzequielCaste Aug 31, 2020
1262db8
Update 2-ui/1-document/11-coordinates/3-position-at-absolute/solution…
EzequielCaste Aug 31, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Update (#11)
  • Loading branch information
Maksumi Murakami
Maksumi Murakami authored Aug 5, 2020
commit 5d7a154405d88251b96c5b7ad9dcc7a4ba674a36
114 changes: 57 additions & 57 deletions 4-binary/04-file/article.md
Original file line number Diff line number Diff line change
@@ -1,27 +1,27 @@
# File and FileReader
# File y FileReader

A [File](https://www.w3.org/TR/FileAPI/#dfn-file) object inherits from `Blob` and is extended with filesystem-related capabilities.
Un [File](https://www.w3.org/TR/FileAPI/#dfn-file) hereda de `Blob` y extiende las capacidades relacionadas con el sistema de archivos.

There are two ways to obtain it.
Hay dos maneras de obtenerlo

First, there's a constructor, similar to `Blob`:
Primero, hay un constructor, similar al de `Blob`:

```js
new File(fileParts, fileName, [options])
```

- **`fileParts`** -- is an array of Blob/BufferSource/String values.
- **`fileName`** -- file name string.
- **`options`** -- optional object:
- **`lastModified`** -- the timestamp (integer date) of last modification.
- **`fileParts`** -- es un array con valores de tipo Blob/BufferSource/String.
- **`fileName`** -- el nombre del archivo..
- **`options`** -- objeto opcional:
- **`lastModified`** -- la marca de tiempo (fecha en mili-segundos, de tipo entero) de la última modificación.

Second, more often we get a file from `<input type="file">` or drag'n'drop or other browser interfaces. In that case, the file gets this information from OS.
Segundo, a menudo obtenemos un archivo mediante un `<input type="file">` o arrastrar y soltar u otras interfaces del navegador. En este caso el archivo obtiene la información del Sistema Operativo.

As `File` inherits from `Blob`, `File` objects have the same properties, plus:
- `name` -- the file name,
- `lastModified` -- the timestamp of last modification.
Como `File` (Archivo) hereda de `Blob`, objetos de tipo `File` tienen las mismas propiedades, mas:
- `name` -- el nombre del archivo,
- `lastModified` -- la marca de tiempo de la última modificación.

That's how we can get a `File` object from `<input type="file">`:
Así es como obtenemos un objeto `File` desde `<input type="file">` :

```html run
<input type="file" onchange="showFile(this)">
Expand All @@ -37,49 +37,49 @@ function showFile(input) {
```

```smart
The input may select multiple files, so `input.files` is an array-like object with them. Here we have only one file, so we just take `input.files[0]`.
El input puede seleccionar varios archivos, por lo que `input.files` es un array de dichos archivos . En este caso tenemos un solo archivo por lo que solo es necesario usar `input.files[0]`.
```

## FileReader

[FileReader](https://www.w3.org/TR/FileAPI/#dfn-filereader) is an object with the sole purpose of reading data from `Blob` (and hence `File` too) objects.
[FileReader](https://www.w3.org/TR/FileAPI/#dfn-filereader) es un objeto con el único porpósito de leer datos desde objetos de tipo `Blob` (por lo tanto `File` también).

It delivers the data using events, as reading from disk may take time.
El entrega los datos usando eventos debido a que leerlos desde el disco puede tomar un tiempo.

The constructor:
El constructor:

```js
let reader = new FileReader(); // no arguments
let reader = new FileReader(); // sin argumentos
```

The main methods:
Los métodos principales:

- **`readAsArrayBuffer(blob)`** -- read the data in binary format `ArrayBuffer`.
- **`readAsText(blob, [encoding])`** -- read the data as a text string with the given encoding (`utf-8` by default).
- **`readAsDataURL(blob)`** -- read the binary data and encode it as base64 data url.
- **`abort()`** -- cancel the operation.
- **`readAsArrayBuffer(blob)`** -- lee los datos en formato binario `ArrayBuffer`.
- **`readAsText(blob, [codificación])`** -- lee los datos como una cadena de texto con la codificación dada (por defecto es `utf-8`).
- **`readAsDataURL(blob)`** -- lee los datos binarios y los codifica como [Datos URIs] en base 64 (https://developer.mozilla.org/es/docs/Web/HTTP/Basics_of_HTTP/Datos_URIs).
- **`abort()`** -- cancela la operación.

The choice of `read*` method depends on which format we prefer, how we're going to use the data.
La opción del método `read*` depende de qué formato preferimos y cómo vamos a usar los datos.

- `readAsArrayBuffer` -- for binary files, to do low-level binary operations. For high-level operations, like slicing, `File` inherits from `Blob`, so we can call them directly, without reading.
- `readAsText` -- for text files, when we'd like to get a string.
- `readAsDataURL` -- when we'd like to use this data in `src` for `img` or another tag. There's an alternative to reading a file for that, as discussed in chapter <info:blob>: `URL.createObjectURL(file)`.
- `readAsArrayBuffer` -- para archivos binarios, en donde se hacen operaciones binarias de bajo nivel. Para operaciones de alto nivel, como slicing, `File` hereda de `Blob` por lo que podemos llamarlas directamente sin tener que leer.
- `readAsText` -- para archivos de texto, cuando nesecitamos obtener una cadena.
- `readAsDataURL` -- cuando necesitamos usar estos datos como valores de `src` en `img` u otras etiquetas html. Hay otra alternativa para leer archivos de ese tipo como discutimos en el capítulo <info:blob>: `URL.createObjectURL(file)`.

As the reading proceeds, there are events:
- `loadstart` -- loading started.
- `progress` -- occurs during reading.
- `load` -- no errors, reading complete.
- `abort` -- `abort()` called.
- `error` -- error has occurred.
- `loadend` -- reading finished with either success or failure.
Mientras se va realizando la lectura, suceden varios eventos:
- `loadstart` -- la carga comenzó.
- `progress` -- ocurre mientras se lee.
- `load` -- lectura completada, sin errores.
- `abort` -- `abort()` ha sido llamado.
- `error` -- ha ocurrido un error .
- `loadend` -- la lectura finalizó exitosa o no .

When the reading is finished, we can access the result as:
- `reader.result` is the result (if successful)
- `reader.error` is the error (if failed).
Cuando la lectura finaliza, podemos acceder al resultado como:
- `reader.result` el resultado (si fue exitoso)
- `reader.error` el error (si hubo fallo).

The most widely used events are for sure `load` and `error`.
Los mas ampliamente usados son seguramente `load` y `error`.

Here's an example of reading a file:
Un ejemplo de como leer un archivo:

```html run
<input type="file" onchange="readFile(this)">
Expand All @@ -104,35 +104,35 @@ function readFile(input) {
</script>
```

```smart header="`FileReader` for blobs"
As mentioned in the chapter <info:blob>, `FileReader` can read not just files, but any blobs.
```smart header="`FileReader` para blobs"
Como mencionamos en el capítulo <info:blob>, `FileReader` no solo lee archivos sino también cualquier blob.

We can use it to convert a blob to another format:
- `readAsArrayBuffer(blob)` -- to `ArrayBuffer`,
- `readAsText(blob, [encoding])` -- to string (an alternative to `TextDecoder`),
- `readAsDataURL(blob)` -- to base64 data url.
Podemos usarlo para convertir un blob a otro formato:
- `readAsArrayBuffer(blob)` -- a `ArrayBuffer`,
- `readAsText(blob, [encoding])` -- a una cadena (una alternativa al `TextDecoder`),
- `readAsDataURL(blob)` -- a Datos URI en base 64.
```


```smart header="`FileReaderSync` is available inside Web Workers"
For Web Workers, there also exists a synchronous variant of `FileReader`, called [FileReaderSync](https://www.w3.org/TR/FileAPI/#FileReaderSync).
```smart header="`FileReaderSync` está disponible dentro de Web Workers"
Para los Web Workers también existe una variante síncrona de `FileReader` llamada [FileReaderSync](https://www.w3.org/TR/FileAPI/#FileReaderSync).

Its reading methods `read*` do not generate events, but rather return a result, as regular functions do.
Sus metodos `read*` no generan eventos sino que devuelven un resultado como las funciones regulares.

That's only inside a Web Worker though, because delays in synchronous calls, that are possible while reading from files, in Web Workers are less important. They do not affect the page.
Esto es solo dentro de un Web Worker, debido a que demoras en llamadas síncronas mientras se lee el archivo en Web Worker no son tan importantes. No afectan la página.
```

## Summary
## Resumen

`File` objects inherit from `Blob`.
Los objetos `File` heredan de `Blob`.

In addition to `Blob` methods and properties, `File` objects also have `name` and `lastModified` properties, plus the internal ability to read from filesystem. We usually get `File` objects from user input, like `<input>` or Drag'n'Drop events (`ondragend`).
Además de los métodos y propiedades de `Blob`, los objetos `File` también tienen las propiedades `name` y `lastModified` mas la habilidad interna de leer del sistema de archivos. Usualmente obtenemos los objetos `File` mediante la entrada del el usuario con `<input>` o eventos Drag'n'Drop (`ondragend`).

`FileReader` objects can read from a file or a blob, in one of three formats:
- String (`readAsText`).
Los objetos `FileReader` pueden leer desde un archivo o un blob en uno de estos tres formatos:
- String (`readAsText`) .
- `ArrayBuffer` (`readAsArrayBuffer`).
- Data url, base-64 encoded (`readAsDataURL`).
- Datos URI codificado en base 64 (`readAsDataURL`).

In many cases though, we don't have to read the file contents. Just as we did with blobs, we can create a short url with `URL.createObjectURL(file)` and assign it to `<a>` or `<img>`. This way the file can be downloaded or shown up as an image, as a part of canvas etc.
En muchos casos no necesitamos leer el contenido de un archivo como hicimos con los blobs, podemos crear un enlace corto con `URL.createObjectURL(file)` y asignárselo a un `<a>` o `<img>`. De esta manera el archivo puede ser descargado, mostrado como una imagen o como parte de un canvas, etc.

And if we're going to send a `File` over a network, that's also easy: network API like `XMLHttpRequest` or `fetch` natively accepts `File` objects.
Y si vamos a mandar un `File` por la red, es fácil utilizando APIs como `XMLHttpRequest` o `fetch` que aceptan nativamente objetos `File` .