diff --git a/1-js/1-getting-started/1-intro/limitations.png b/1-js/1-getting-started/1-intro/limitations.png index 9e443f71..0f58b9d6 100644 Binary files a/1-js/1-getting-started/1-intro/limitations.png and b/1-js/1-getting-started/1-intro/limitations.png differ diff --git a/1-js/1-getting-started/1-intro/limitations@2x.png b/1-js/1-getting-started/1-intro/limitations@2x.png index bc210fe2..e790016b 100644 Binary files a/1-js/1-getting-started/1-intro/limitations@2x.png and b/1-js/1-getting-started/1-intro/limitations@2x.png differ diff --git a/1-js/10-es-modern/3-promise/article.md b/1-js/10-es-modern/3-promise/article.md index e69de29b..b06a23f1 100644 --- a/1-js/10-es-modern/3-promise/article.md +++ b/1-js/10-es-modern/3-promise/article.md @@ -0,0 +1,567 @@ +# Promise + +Promise (обычно их так и называют "промисы") -- предоставляют удобный способ организации асинхронного кода. + +В современном JavaScript промисы часто используются в том числе и неявно, при помощи генераторов, но об этом чуть позже. + +## Что такое Promise? + +Promise -- это специальный объект, который содержит своё состояние. Вначале `pending` ("ожидание"), затем -- одно из: `fulfilled` ("выполнено успешно") или `rejected` ("выполнено с ошибкой"). + + + +На `promise` можно навешивать коллбэки двух типов: + + + +Способ использования, в общих чертах, такой: +
    +
  1. Код, которому надо сделать что-то асинхронно, создаёт объект `promise` и возвращает его.
  2. +
  3. Внешний код, получив `promise`, навешивает на него обработчики.
  4. +
  5. По завершении асинхронного процесса асинхронный код переводит `promise` в состояние `fulfilled` (с результатом) или `rejected` (с ошибкой). При этом автоматически вызываются обработчики.
  6. +
+ +Синтаксис создания `Promise`: + +```js +var promise = new Promise(function(resolve, reject) { + // Эта функция будет вызвана автоматически + // В ней можно делать любые асинхронные операции, + // А когда они завершаться — вызвать: + // resolve(результат) при успешном выполнении + // reject(ошибка) при ошибке +}) +``` + +Универсальный метод для навешивания обработчиков: + +``` +promise.then(onFulfilled, onRejected) +``` + + + +С его помощью можно назначить как оба обработчика сразу, так и только один: + +```js +// только на успешное выполнение +promise.then(onFulfilled) +// только на ошибку +promise.then(null, onRejected) +``` + +[smart header=".catch"] +Для того, чтобы поставить обработчик только на ошибку, вместо `.then(null, onRejected)` можно написать `.catch(onRejected)` -- это то же самое. +[/smart] + +[smart header="Синхронный `throw` -- то же самое, что `reject`"] +Если в функции промиса происходит ошибка или синхронный `throw`, то вызывается `reject`: +```js +//+ run +var p = new Promise((resolve, reject) => { + throw new Error("o_O"); +}) + +p.catch(alert); // Error: o_O +``` +[/smart] + +Посмотрим, как это выглядит вместе, на простом примере. + + +## Пример с setTimeout + +Возьмём `setTimeout` в качестве асинхронной операции, которая должна через некоторое время успешно завершиться с результатом "result": + +```js +//+ run +// Создаётся объект promise +var promise = new Promise((resolve, reject) => { + + setTimeout(() => { + // переводит в состояние fulfilled с результатом "result" + resolve("result"); + }, 1000); + +}); + +// promise.then навешивает обработчики на успешный результат или ошибку +promise + .then( + result => { + // первая функция-обработчик - запустится при вызове resolve + alert("Fulfilled: " + result); // result - аргумент resolve + }, + error => { + // вторая функция - запустится при вызове reject + alert("Rejected: " + error); // error - аргумент reject + } + ); + +``` + +В результате запуска кода выше -- через 1 секунду выведется "Fulfilled: result". + +А если бы вместо `resolve("result")` был вызов `reject("error")`, то вывелось бы "Rejected: error". Впрочем, как правило, если при выполнении возникла проблема, то `reject` вызывают не со строкой, а с объектом ошибки типа `new Error`: + +```js +//+ run +// Этот promise завершится с ошибкой через 1 секунду +var promise = new Promise((resolve, reject) => { + + setTimeout(() => { +*!* + reject(new Error("время вышло!")); +*/!* + }, 1000); + +}); + +promise + .then( + result => alert("Fulfilled: " + result), +*!* + error => alert("Rejected: " + error.message) // Rejected: время вышло! +*/!* + ); + +``` + +Конечно, вместо `setTimeout` мог бы быть и запрос к серверу и ожидание ввода пользователя, или другой асинхронный процесс. + + +## Promise после reject/resolve -- неизменны + +Заметим, что после вызова `resolve/reject` промис уже не может "передумать". + +Когда промис переходит в состояние "выполнен" -- с результатом (resolve) или ошибкой (reject) -- это навсегда. + +Например: + +```js +//+ run +var promise = new Promise((resolve, reject) => { + +*!* + // через 1 секунду готов результат: result +*/!* + setTimeout(() => resolve("result"), 1000); + +*!* + // через 2 секунды — reject с ошибкой, он будет проигнорирован +*/!* + setTimeout(() => reject(new Error("ignored")), 2000); + +}); + +promise + .then( + result => alert("Fulfilled: " + result), // сработает + error => alert("Rejected: " + error) // не сработает + ); + +``` + +В результате вызова этого кода сработает только первый обработчик `then`, так как после вызова `resolve` промис уже получил состояние (с результатом), и в дальнейшем его уже ничто не изменит. + +Последующие вызовы resolve/reject будут просто проигнороированы. + +А так -- наоборот, ошибка будет раньше: + + +```js +//+ run +var promise = new Promise((resolve, reject) => { + + // reject вызван раньше, resolve будет проигнорирован + setTimeout(() => reject(new Error("error")), 1000); + + setTimeout(() => resolve("ignored"), 2000); + +}); + +promise + .then( + result => alert("Fulfilled: " + result), // не сработает + error => alert("Rejected: " + error) // сработает + ); + +``` + + +## Промисификация + +*Промисификация* -- это когда берут асинхронный функционал и делают для него обёртку, возвращающую промис. + +После промисификации использование функционала зачастую становится гораздо удобнее. + +В качестве примера сделаем такую обёртку для запросов при помощи XMLHttpRequest. + +Функция `loadUrl(url)` будет возвращать промис, который при успешной загрузки данных с `url` будет переходить в `fulfilled` с этими данными, а при ошибке -- в `rejected` с информацией об ошибке: + +```js +//+ autorun +function loadUrl(url) { + + return new Promise(function(resolve, reject) { + + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, true); + + xhr.onload = function() { + if (this.status == 200) { +*!* + resolve(this.response); +*/!* + } else { +*!* + reject(new Error(this.statusText)); +*/!* + } + }; + + xhr.onerror = function() { +*!* + reject(new Error("Network Error")); +*/!* + }; + + xhr.send(); + }); + +} +``` + +Как видно, внутри функции объект `XMLHttpRequest` создаётся и отсылается как обычно, при `onload/onerror` вызываются, соответственно, `resolve` (при статусе 200) или `reject`. + +Использование: + +```js +//+ run +loadUrl("/article/promise/user.json") + .then( + response => alert(`Fulfilled: ${response}`), + error => alert(`Rejected: ${error}`) + ); +``` + + +[smart header="Метод `fetch`"] +Заметим, что ряд современных браузеров уже поддерживает [fetch](https://fetch.spec.whatwg.org) -- новый встроенный метод для AJAX-запросов, призванный заменить XMLHttpRequest. Он, конечно, гораздо мощнее, чем `loadUrl`. И -- да, этот метод использует промисы. Полифилл для него доступен на [](https://github.com/github/fetch). +[/smart] + +Далее мы увидим ещё примеры, а пока -- рассмотрим важные свойства `promise`. + + +## Цепочки промисов + +"Чейнинг" (chaining), то есть возможность строить асинхронные цепочки из промисов -- пожалуй, основная причина, из-за которой существуют и активно используются промисы. + +Например, мы хотим по очереди: +
    +
  1. Загрузить данные посетителя с сервера (асинхронно).
  2. +
  3. Затем отправить запрос о нём на github (асинхронно).
  4. +
  5. Когда это будет готово, вывести его github-аватар на экран (асинхронно).
  6. +
  7. ...И сделать код расширяемым, чтобы цепочку можно было легко продолжить.
  8. +
+ +Вот код для этого, использующий функцию `loadUrl`, описанную выше: + +```js +//+ run +'use strict'; + +// сделать запрос +loadUrl('/article/promise/user.json') +*!* + // 1. Получить данные о пользователе в JSON и передать дальше +*/!* + .then(response => { + console.log(response); + let user = JSON.parse(response); +*!* + return user; +*/!* + }) +*!* + // 2. Получить информацию с github +*/!* + .then(user => { + console.log(user); +*!* + return loadUrl(`https://api.github.com/users/${user.name}`); +*/!* + }) +*!* + // 3. Вывести аватар на 3 секунды (можно с анимацией) +*/!* + .then(githubUser => { + console.log(githubUser); + githubUser = JSON.parse(githubUser); + + let img = new Image(); + img.src = githubUser.avatar_url; + img.className = "promise-avatar-example"; + document.body.appendChild(img); + +*!* + setTimeout(() => img.remove(), 3000); // (*) +*/!* + }); +``` + +Самое главное в этом коде -- последовательность вызовов: + +```js +loadUrl(...) + .then(...) + .then(...) + .then(...) +``` + +При чейнинге, то есть последовательных вызовах `.then...then..then`, в каждый следующий `then` переходит результат от предыдущего. + +**Причём, если `then` вернул промис, то в следующий `then` будет передан не сам промис, а его результат.** + +В коде выше: + +
    +
  1. В первом `then` возвращается объект `user`, он переходит в следующий `then`.
  2. +
  3. Во втором `then` возвращается промис (результат `loadUser`). Когда он будет завершён (может пройти какое-то время), то будет вызван следующий `then`.
  4. +
  5. Третий `then` ничего не возвращает.
  6. +
+ +Схематично его работу можно изобразить так: + + + +Обратим внимание, что последний `then` в нашем примере ничего не возвращает. Если мы хотим, чтобы после `setTimeout` `(*)` асинхронная цепочка могла быть продолжена, то последний `then` тоже должен вернуть промис. + +Это общее правило. Если внутри `then` стартует новый асинхронный процесс, то для того, чтобы дождаться его окончания, мы должны вернуть промис, который перейдёт в состояние "выполнен" после `setTimeout`. + +Строку `(*)` для этого нужно переписать так: +```js +.then(githubUser => { + ... + + // вместо setTimeout(() => img.remove(), 3000); + + return new Promise((resolve, reject) => { + setTimeout(() => { + img.remove(); + // после таймаута — просто resolve, без результата, + // чтобы управление перешло в следующий then + // (или можно передать данные пользователя дальше по цепочке) + resolve(); + }, 3000); + }); +}) +``` + +Теперь, если к цепочке добавится ещё `then`, то он будет вызван после окончания `setTimeout`. + +## Перехват ошибок + +Выше мы рассмотрели "идеальный случай" выполнения, когда ошибок нет. + +А что, если github не отвечает? Или JSON.parse бросил синтаксическую ошибку при обработке данных? + +Да мало ли, где ошибка... + +Правило здесь очень простое. + +**При возникновении ошибки -- она отправляется в ближайший обработчик `onRejected`.** + +Такой обработчик нужно поставить через второй аргумент `.then(..., onRejected)` или, что то же самое, через `.catch(onRejected)`. + +Чтобы поймать всевозможные ошибки, которые возникнут при загрузке и обработке данных, добавим `catch` в конец нашей цепочки: + +```js +//+ run +'use strict'; + +*!* +// в loadUrl обратимся к несуществующей странице +*/!* +loadUrl('/page-not-exists') + .then(response => JSON.parse(response)) + .then(user => loadUrl(`https://api.github.com/users/${user.name}`)) + .then(githubUser => { + githubUser = JSON.parse(githubUser); + + let img = new Image(); + img.src = githubUser.avatar_url; + img.className = "promise-avatar-example"; + document.body.appendChild(img); + + return new Promise((resolve, reject) => { + setTimeout(() => { + img.remove(); + resolve(); + }, 3000); + }); + }) +*!* + .catch(error => { + alert(error); // Error: Not Found + }); +*/!* +``` + +Принцип очень похож на обычный `try..catch`: мы делаем асинхронную цепочку из `.then`, а затем, когда нужно перехватить ошибки, вызываем `.catch(onRejected)`. + + +[smart header="А что после catch?"] +Обработчик `onRejected` получает ошибку и должен обработать её. + +Здесь два варианта развития событий: +
    +
  1. Если ошибка не критичная, то он возвращает значение через `return`, и управление переходит в ближайший `onFulfilled`.
  2. +
  3. Если продолжить выполнение с такой ошибкой нельзя, то он делает `throw`, и тогда ошибка переходит в ближайший `onRejected`. +
  4. +
+[/smart] + +## Промисы в деталях + +Посмотрим внимательнее, что такое промис и как он работает, в соответствии со стандартом ES-2015. + + + + +Поток выполнения сразу станет очевидным, как только мы разберём очень простое правило. + +Оно состоит из трёх частей: + +
    +
  1. Каждый `promise.then/catch` возвращает новый промис `newPromise`.
  2. +
  3. Ссылка на `newPromise` сохраняется в записывается в `promise`.
  4. +При успешном выполнении этого промиса, вызывается следующий `onFulfilled`, если ошибка, то `onRejected`. +
  5. Этот обработчик возвращает... см. пункт 1.
  6. +
+ +Давайте по шагам. + +Очевидно, что каждый .then/catch должен промис. Это всегда так, иначе мы бы не смогли организовать чейнинг. + +Этот промис -- всегда новый, не равный предыдущему. + +Проверим это: + +```js +//+ run +// Создадим промис и цепочку .then +var promise = new Promise((resolve, reject) => { + setTimeout(() => resolve(1), 1000); +}); + +var promise2 = promise + .then(alert); + +// Выведем результат then +alert(promise2); // да, это промис: [object Promise] +alert(promise == promise2); // да, это новый промис +``` + +[smart header="Обработчики -- всегда асинхронны"] +Кстати, обработчики в `.then/catch` всегда выполняются асинхронно, как будто обёрнуты в `setTimeout(..., 0)`, даже если внутри синхронная функция. + +Например: +```js +//+ run +var promise = new Promise((resolve, reject) => { + resolve("result") +}); + +// сработает асинхронно +promise.then(alert); // (2) + +alert("before promise"); // (1) +``` + +При запуске этого кода выведется сначала `(1)`, а потом `(2)`. + +Такая "форсированная" асинхронность предусмотрена стандартом, чтобы избежать ситуаций, когда некий код работает то синхронно, то асинхронно, и возможных при этом багов. +[/smart] + +Обработчики добавляются в общий список. + + + + +При выполнении обработчика `.then/catch` -- он может либо что-то вернуть + +
    +
  1. Обработчика вернул значение (или ничего не вернул, что можно считать `return undefined`) + + + +Пример: + + +Ошибкой считается либо вызов `reject`, либо синхронный `throw` в promise-функции: + +```js +var promise = new Promise((resolve, reject) { + + // эти две строки делают одно и то же: + // переводят промис в состояние "rejected" + throw new Error("..."); + reject(new Error("...")) + +}); +``` + +Обратим внимание, что `throw` корректно обрабатывается только если он синхронный. + +Вот так -- не подойдёт: + +```js +var promise = new Promise((resolve, reject) { + + setTimeout(() => { + // нельзя так делать, асинхронно должен быть reject + throw new Error("..."); + }, 1000); + +}); +``` + +На + + +Мы уже использовали это неявно, при загрузке пользователя в примере выше: + +```js +loadUrl('/article/promise/user.json') + .then(response => { + // ... +*!* + let user = JSON.parse(response); +*/!* + return user; + }) +``` + +Если при `JSON.parse` будет синтаксическая ошибка (некорректный JSON), то + + + + + +[head] + +[/head] diff --git a/1-js/10-es-modern/3-promise/promiseInit.png b/1-js/10-es-modern/3-promise/promiseInit.png new file mode 100644 index 00000000..2ebb001b Binary files /dev/null and b/1-js/10-es-modern/3-promise/promiseInit.png differ diff --git a/1-js/10-es-modern/3-promise/promiseInit@2x.png b/1-js/10-es-modern/3-promise/promiseInit@2x.png new file mode 100644 index 00000000..bff15fce Binary files /dev/null and b/1-js/10-es-modern/3-promise/promiseInit@2x.png differ diff --git a/1-js/10-es-modern/3-promise/promiseUserFlow.png b/1-js/10-es-modern/3-promise/promiseUserFlow.png new file mode 100644 index 00000000..a61d7498 Binary files /dev/null and b/1-js/10-es-modern/3-promise/promiseUserFlow.png differ diff --git a/1-js/10-es-modern/3-promise/promiseUserFlow@2x.png b/1-js/10-es-modern/3-promise/promiseUserFlow@2x.png new file mode 100644 index 00000000..815c41dd Binary files /dev/null and b/1-js/10-es-modern/3-promise/promiseUserFlow@2x.png differ diff --git a/1-js/10-es-modern/3-promise/user.json b/1-js/10-es-modern/3-promise/user.json new file mode 100644 index 00000000..32f89971 --- /dev/null +++ b/1-js/10-es-modern/3-promise/user.json @@ -0,0 +1,4 @@ +{ + "name": "iliakan", + "isAdmin": true +} diff --git a/1-js/2-first-steps/5-variables/variable-change.png b/1-js/2-first-steps/5-variables/variable-change.png index 45a3b32c..19fa6fbf 100644 Binary files a/1-js/2-first-steps/5-variables/variable-change.png and b/1-js/2-first-steps/5-variables/variable-change.png differ diff --git a/1-js/2-first-steps/5-variables/variable-change@2x.png b/1-js/2-first-steps/5-variables/variable-change@2x.png index 00539b3a..d00fbe15 100644 Binary files a/1-js/2-first-steps/5-variables/variable-change@2x.png and b/1-js/2-first-steps/5-variables/variable-change@2x.png differ diff --git a/1-js/2-first-steps/5-variables/variable.png b/1-js/2-first-steps/5-variables/variable.png index 60cb17d3..aecd47ad 100644 Binary files a/1-js/2-first-steps/5-variables/variable.png and b/1-js/2-first-steps/5-variables/variable.png differ diff --git a/1-js/2-first-steps/5-variables/variable@2x.png b/1-js/2-first-steps/5-variables/variable@2x.png index 22d562b5..97d2b79d 100644 Binary files a/1-js/2-first-steps/5-variables/variable@2x.png and b/1-js/2-first-steps/5-variables/variable@2x.png differ diff --git a/1-js/3-writing-js/2-coding-style/code-style.png b/1-js/3-writing-js/2-coding-style/code-style.png index 5b2d9940..d41a9883 100644 Binary files a/1-js/3-writing-js/2-coding-style/code-style.png and b/1-js/3-writing-js/2-coding-style/code-style.png differ diff --git a/1-js/3-writing-js/2-coding-style/code-style@2x.png b/1-js/3-writing-js/2-coding-style/code-style@2x.png index 72eb4308..acb8ac1b 100644 Binary files a/1-js/3-writing-js/2-coding-style/code-style@2x.png and b/1-js/3-writing-js/2-coding-style/code-style@2x.png differ diff --git a/1-js/3-writing-js/2-coding-style/figure-bracket-style.png b/1-js/3-writing-js/2-coding-style/figure-bracket-style.png index 71094591..992d126e 100644 Binary files a/1-js/3-writing-js/2-coding-style/figure-bracket-style.png and b/1-js/3-writing-js/2-coding-style/figure-bracket-style.png differ diff --git a/1-js/3-writing-js/2-coding-style/figure-bracket-style@2x.png b/1-js/3-writing-js/2-coding-style/figure-bracket-style@2x.png index c12810b6..7b937e88 100644 Binary files a/1-js/3-writing-js/2-coding-style/figure-bracket-style@2x.png and b/1-js/3-writing-js/2-coding-style/figure-bracket-style@2x.png differ diff --git a/1-js/4-data-structures/4-object/object-person-1.png b/1-js/4-data-structures/4-object/object-person-1.png index ca18f5b8..532330e0 100644 Binary files a/1-js/4-data-structures/4-object/object-person-1.png and b/1-js/4-data-structures/4-object/object-person-1.png differ diff --git a/1-js/4-data-structures/4-object/object-person-1@2x.png b/1-js/4-data-structures/4-object/object-person-1@2x.png index 1b4afcfb..7904d95c 100644 Binary files a/1-js/4-data-structures/4-object/object-person-1@2x.png and b/1-js/4-data-structures/4-object/object-person-1@2x.png differ diff --git a/1-js/4-data-structures/4-object/object-person-2.png b/1-js/4-data-structures/4-object/object-person-2.png index 71ff8208..4630054b 100644 Binary files a/1-js/4-data-structures/4-object/object-person-2.png and b/1-js/4-data-structures/4-object/object-person-2.png differ diff --git a/1-js/4-data-structures/4-object/object-person-2@2x.png b/1-js/4-data-structures/4-object/object-person-2@2x.png index 17632c05..73ab98e8 100644 Binary files a/1-js/4-data-structures/4-object/object-person-2@2x.png and b/1-js/4-data-structures/4-object/object-person-2@2x.png differ diff --git a/1-js/4-data-structures/4-object/object-person-empty.png b/1-js/4-data-structures/4-object/object-person-empty.png index 54e9aee7..668f13bf 100644 Binary files a/1-js/4-data-structures/4-object/object-person-empty.png and b/1-js/4-data-structures/4-object/object-person-empty.png differ diff --git a/1-js/4-data-structures/4-object/object-person-empty@2x.png b/1-js/4-data-structures/4-object/object-person-empty@2x.png index 1a0410e2..da71618c 100644 Binary files a/1-js/4-data-structures/4-object/object-person-empty@2x.png and b/1-js/4-data-structures/4-object/object-person-empty@2x.png differ diff --git a/1-js/4-data-structures/4-object/object.png b/1-js/4-data-structures/4-object/object.png index 6ca037d7..abda01bb 100644 Binary files a/1-js/4-data-structures/4-object/object.png and b/1-js/4-data-structures/4-object/object.png differ diff --git a/1-js/4-data-structures/4-object/object@2x.png b/1-js/4-data-structures/4-object/object@2x.png index 73764fde..bd2590bb 100644 Binary files a/1-js/4-data-structures/4-object/object@2x.png and b/1-js/4-data-structures/4-object/object@2x.png differ diff --git a/1-js/4-data-structures/6-object-reference/variable-contains-reference.png b/1-js/4-data-structures/6-object-reference/variable-contains-reference.png index b5e37abd..53d18fed 100644 Binary files a/1-js/4-data-structures/6-object-reference/variable-contains-reference.png and b/1-js/4-data-structures/6-object-reference/variable-contains-reference.png differ diff --git a/1-js/4-data-structures/6-object-reference/variable-contains-reference@2x.png b/1-js/4-data-structures/6-object-reference/variable-contains-reference@2x.png index 6d5b404b..9a152357 100644 Binary files a/1-js/4-data-structures/6-object-reference/variable-contains-reference@2x.png and b/1-js/4-data-structures/6-object-reference/variable-contains-reference@2x.png differ diff --git a/1-js/4-data-structures/6-object-reference/variable-copy-reference.png b/1-js/4-data-structures/6-object-reference/variable-copy-reference.png index 5a33ff7e..b6a502c3 100644 Binary files a/1-js/4-data-structures/6-object-reference/variable-copy-reference.png and b/1-js/4-data-structures/6-object-reference/variable-copy-reference.png differ diff --git a/1-js/4-data-structures/6-object-reference/variable-copy-reference@2x.png b/1-js/4-data-structures/6-object-reference/variable-copy-reference@2x.png index f6d7f397..8e27b051 100644 Binary files a/1-js/4-data-structures/6-object-reference/variable-copy-reference@2x.png and b/1-js/4-data-structures/6-object-reference/variable-copy-reference@2x.png differ diff --git a/1-js/4-data-structures/6-object-reference/variable-copy-value.png b/1-js/4-data-structures/6-object-reference/variable-copy-value.png index 811c9b8f..33578c15 100644 Binary files a/1-js/4-data-structures/6-object-reference/variable-copy-value.png and b/1-js/4-data-structures/6-object-reference/variable-copy-value.png differ diff --git a/1-js/4-data-structures/6-object-reference/variable-copy-value@2x.png b/1-js/4-data-structures/6-object-reference/variable-copy-value@2x.png index 83460a40..588762f5 100644 Binary files a/1-js/4-data-structures/6-object-reference/variable-copy-value@2x.png and b/1-js/4-data-structures/6-object-reference/variable-copy-value@2x.png differ diff --git a/1-js/4-data-structures/7-array/array-pop.png b/1-js/4-data-structures/7-array/array-pop.png index 557c85ef..af9d78be 100644 Binary files a/1-js/4-data-structures/7-array/array-pop.png and b/1-js/4-data-structures/7-array/array-pop.png differ diff --git a/1-js/4-data-structures/7-array/array-pop@2x.png b/1-js/4-data-structures/7-array/array-pop@2x.png index ddceb175..223a3f62 100644 Binary files a/1-js/4-data-structures/7-array/array-pop@2x.png and b/1-js/4-data-structures/7-array/array-pop@2x.png differ diff --git a/1-js/4-data-structures/7-array/array-shift.png b/1-js/4-data-structures/7-array/array-shift.png index 1243e8de..37cd1218 100644 Binary files a/1-js/4-data-structures/7-array/array-shift.png and b/1-js/4-data-structures/7-array/array-shift.png differ diff --git a/1-js/4-data-structures/7-array/array-shift@2x.png b/1-js/4-data-structures/7-array/array-shift@2x.png index 82eef945..e94202db 100644 Binary files a/1-js/4-data-structures/7-array/array-shift@2x.png and b/1-js/4-data-structures/7-array/array-shift@2x.png differ diff --git a/1-js/4-data-structures/7-array/array-speed.png b/1-js/4-data-structures/7-array/array-speed.png index 827837a6..d7989367 100644 Binary files a/1-js/4-data-structures/7-array/array-speed.png and b/1-js/4-data-structures/7-array/array-speed.png differ diff --git a/1-js/4-data-structures/7-array/array-speed@2x.png b/1-js/4-data-structures/7-array/array-speed@2x.png index 43c7a1c4..4c38c9a9 100644 Binary files a/1-js/4-data-structures/7-array/array-speed@2x.png and b/1-js/4-data-structures/7-array/array-speed@2x.png differ diff --git a/1-js/4-data-structures/7-array/queue.png b/1-js/4-data-structures/7-array/queue.png index 693c7ed4..8a90ef30 100644 Binary files a/1-js/4-data-structures/7-array/queue.png and b/1-js/4-data-structures/7-array/queue.png differ diff --git a/1-js/4-data-structures/7-array/queue@2x.png b/1-js/4-data-structures/7-array/queue@2x.png index e2db9747..2a1281d0 100644 Binary files a/1-js/4-data-structures/7-array/queue@2x.png and b/1-js/4-data-structures/7-array/queue@2x.png differ diff --git a/1-js/4-data-structures/7-array/stack.png b/1-js/4-data-structures/7-array/stack.png index d49d4901..566da719 100644 Binary files a/1-js/4-data-structures/7-array/stack.png and b/1-js/4-data-structures/7-array/stack.png differ diff --git a/1-js/4-data-structures/7-array/stack@2x.png b/1-js/4-data-structures/7-array/stack@2x.png index 4242b747..9301457d 100644 Binary files a/1-js/4-data-structures/7-array/stack@2x.png and b/1-js/4-data-structures/7-array/stack@2x.png differ diff --git a/1-js/4-data-structures/8-array-methods/9-output-single-linked-list/linked-list.png b/1-js/4-data-structures/8-array-methods/9-output-single-linked-list/linked-list.png index 87d31f4f..1a5ae35e 100644 Binary files a/1-js/4-data-structures/8-array-methods/9-output-single-linked-list/linked-list.png and b/1-js/4-data-structures/8-array-methods/9-output-single-linked-list/linked-list.png differ diff --git a/1-js/4-data-structures/8-array-methods/9-output-single-linked-list/linked-list@2x.png b/1-js/4-data-structures/8-array-methods/9-output-single-linked-list/linked-list@2x.png index c3b1e140..73eabc39 100644 Binary files a/1-js/4-data-structures/8-array-methods/9-output-single-linked-list/linked-list@2x.png and b/1-js/4-data-structures/8-array-methods/9-output-single-linked-list/linked-list@2x.png differ diff --git a/1-js/4-data-structures/9-array-iteration/reduce.png b/1-js/4-data-structures/9-array-iteration/reduce.png index 45acbd2e..9cc46dee 100644 Binary files a/1-js/4-data-structures/9-array-iteration/reduce.png and b/1-js/4-data-structures/9-array-iteration/reduce.png differ diff --git a/1-js/4-data-structures/9-array-iteration/reduce@2x.png b/1-js/4-data-structures/9-array-iteration/reduce@2x.png index e2f4d438..3264c699 100644 Binary files a/1-js/4-data-structures/9-array-iteration/reduce@2x.png and b/1-js/4-data-structures/9-array-iteration/reduce@2x.png differ diff --git a/1-js/5-functions-closures/6-memory-management/family-no-family.png b/1-js/5-functions-closures/6-memory-management/family-no-family.png index 12588418..fe544cce 100644 Binary files a/1-js/5-functions-closures/6-memory-management/family-no-family.png and b/1-js/5-functions-closures/6-memory-management/family-no-family.png differ diff --git a/1-js/5-functions-closures/6-memory-management/family-no-family@2x.png b/1-js/5-functions-closures/6-memory-management/family-no-family@2x.png index 895db8f2..db0d823b 100644 Binary files a/1-js/5-functions-closures/6-memory-management/family-no-family@2x.png and b/1-js/5-functions-closures/6-memory-management/family-no-family@2x.png differ diff --git a/1-js/5-functions-closures/6-memory-management/family-no-father-2.png b/1-js/5-functions-closures/6-memory-management/family-no-father-2.png index b625bb48..cab6f9a5 100644 Binary files a/1-js/5-functions-closures/6-memory-management/family-no-father-2.png and b/1-js/5-functions-closures/6-memory-management/family-no-father-2.png differ diff --git a/1-js/5-functions-closures/6-memory-management/family-no-father-2@2x.png b/1-js/5-functions-closures/6-memory-management/family-no-father-2@2x.png index 4cb15ee4..9cebdd4b 100644 Binary files a/1-js/5-functions-closures/6-memory-management/family-no-father-2@2x.png and b/1-js/5-functions-closures/6-memory-management/family-no-father-2@2x.png differ diff --git a/1-js/5-functions-closures/6-memory-management/family-no-father.png b/1-js/5-functions-closures/6-memory-management/family-no-father.png index cbe8b2bf..2c5ea4e1 100644 Binary files a/1-js/5-functions-closures/6-memory-management/family-no-father.png and b/1-js/5-functions-closures/6-memory-management/family-no-father.png differ diff --git a/1-js/5-functions-closures/6-memory-management/family-no-father@2x.png b/1-js/5-functions-closures/6-memory-management/family-no-father@2x.png index a8acf84e..870e1c3e 100644 Binary files a/1-js/5-functions-closures/6-memory-management/family-no-father@2x.png and b/1-js/5-functions-closures/6-memory-management/family-no-father@2x.png differ diff --git a/1-js/5-functions-closures/6-memory-management/family.png b/1-js/5-functions-closures/6-memory-management/family.png index 69dd3922..231170b2 100644 Binary files a/1-js/5-functions-closures/6-memory-management/family.png and b/1-js/5-functions-closures/6-memory-management/family.png differ diff --git a/1-js/5-functions-closures/6-memory-management/family@2x.png b/1-js/5-functions-closures/6-memory-management/family@2x.png index dd0c26d5..95b0e7e7 100644 Binary files a/1-js/5-functions-closures/6-memory-management/family@2x.png and b/1-js/5-functions-closures/6-memory-management/family@2x.png differ diff --git a/1-js/7-js-misc/3-setTimeout-setInterval/setinterval-interval.png b/1-js/7-js-misc/3-setTimeout-setInterval/setinterval-interval.png index d0eb6f8f..51c4bdfe 100644 Binary files a/1-js/7-js-misc/3-setTimeout-setInterval/setinterval-interval.png and b/1-js/7-js-misc/3-setTimeout-setInterval/setinterval-interval.png differ diff --git a/1-js/7-js-misc/3-setTimeout-setInterval/setinterval-interval@2x.png b/1-js/7-js-misc/3-setTimeout-setInterval/setinterval-interval@2x.png index ba84bab7..672b106d 100644 Binary files a/1-js/7-js-misc/3-setTimeout-setInterval/setinterval-interval@2x.png and b/1-js/7-js-misc/3-setTimeout-setInterval/setinterval-interval@2x.png differ diff --git a/1-js/7-js-misc/3-setTimeout-setInterval/settimeout-interval.png b/1-js/7-js-misc/3-setTimeout-setInterval/settimeout-interval.png index 99cf33b0..364f909d 100644 Binary files a/1-js/7-js-misc/3-setTimeout-setInterval/settimeout-interval.png and b/1-js/7-js-misc/3-setTimeout-setInterval/settimeout-interval.png differ diff --git a/1-js/7-js-misc/3-setTimeout-setInterval/settimeout-interval@2x.png b/1-js/7-js-misc/3-setTimeout-setInterval/settimeout-interval@2x.png index 5e70fef6..b4f5685a 100644 Binary files a/1-js/7-js-misc/3-setTimeout-setInterval/settimeout-interval@2x.png and b/1-js/7-js-misc/3-setTimeout-setInterval/settimeout-interval@2x.png differ diff --git a/1-js/9-prototypes/1-prototype/proto-animal-rabbit.png b/1-js/9-prototypes/1-prototype/proto-animal-rabbit.png index 1f18049e..80888f27 100644 Binary files a/1-js/9-prototypes/1-prototype/proto-animal-rabbit.png and b/1-js/9-prototypes/1-prototype/proto-animal-rabbit.png differ diff --git a/1-js/9-prototypes/1-prototype/proto-animal-rabbit@2x.png b/1-js/9-prototypes/1-prototype/proto-animal-rabbit@2x.png index 03d89af3..b5395718 100644 Binary files a/1-js/9-prototypes/1-prototype/proto-animal-rabbit@2x.png and b/1-js/9-prototypes/1-prototype/proto-animal-rabbit@2x.png differ diff --git a/1-js/9-prototypes/3-native-prototypes/native-prototypes-array-tostring.png b/1-js/9-prototypes/3-native-prototypes/native-prototypes-array-tostring.png index 0c54b39c..2338e7b5 100644 Binary files a/1-js/9-prototypes/3-native-prototypes/native-prototypes-array-tostring.png and b/1-js/9-prototypes/3-native-prototypes/native-prototypes-array-tostring.png differ diff --git a/1-js/9-prototypes/3-native-prototypes/native-prototypes-array-tostring@2x.png b/1-js/9-prototypes/3-native-prototypes/native-prototypes-array-tostring@2x.png index 46150fab..f90ce022 100644 Binary files a/1-js/9-prototypes/3-native-prototypes/native-prototypes-array-tostring@2x.png and b/1-js/9-prototypes/3-native-prototypes/native-prototypes-array-tostring@2x.png differ diff --git a/1-js/9-prototypes/3-native-prototypes/native-prototypes-classes.png b/1-js/9-prototypes/3-native-prototypes/native-prototypes-classes.png index ce43866a..0b80717b 100644 Binary files a/1-js/9-prototypes/3-native-prototypes/native-prototypes-classes.png and b/1-js/9-prototypes/3-native-prototypes/native-prototypes-classes.png differ diff --git a/1-js/9-prototypes/3-native-prototypes/native-prototypes-classes@2x.png b/1-js/9-prototypes/3-native-prototypes/native-prototypes-classes@2x.png index c5197e42..26bbec9e 100644 Binary files a/1-js/9-prototypes/3-native-prototypes/native-prototypes-classes@2x.png and b/1-js/9-prototypes/3-native-prototypes/native-prototypes-classes@2x.png differ diff --git a/1-js/9-prototypes/3-native-prototypes/native-prototypes-object.png b/1-js/9-prototypes/3-native-prototypes/native-prototypes-object.png index 169f0206..b1c549f3 100644 Binary files a/1-js/9-prototypes/3-native-prototypes/native-prototypes-object.png and b/1-js/9-prototypes/3-native-prototypes/native-prototypes-object.png differ diff --git a/1-js/9-prototypes/3-native-prototypes/native-prototypes-object@2x.png b/1-js/9-prototypes/3-native-prototypes/native-prototypes-object@2x.png index 754d366f..a303eb36 100644 Binary files a/1-js/9-prototypes/3-native-prototypes/native-prototypes-object@2x.png and b/1-js/9-prototypes/3-native-prototypes/native-prototypes-object@2x.png differ diff --git a/1-js/9-prototypes/5-class-inheritance/class-inheritance-array-object.png b/1-js/9-prototypes/5-class-inheritance/class-inheritance-array-object.png index fa983533..b03e9fbb 100644 Binary files a/1-js/9-prototypes/5-class-inheritance/class-inheritance-array-object.png and b/1-js/9-prototypes/5-class-inheritance/class-inheritance-array-object.png differ diff --git a/1-js/9-prototypes/5-class-inheritance/class-inheritance-array-object@2x.png b/1-js/9-prototypes/5-class-inheritance/class-inheritance-array-object@2x.png index b9c2ffe5..6bd075a3 100644 Binary files a/1-js/9-prototypes/5-class-inheritance/class-inheritance-array-object@2x.png and b/1-js/9-prototypes/5-class-inheritance/class-inheritance-array-object@2x.png differ diff --git a/1-js/9-prototypes/5-class-inheritance/class-inheritance-rabbit-animal.png b/1-js/9-prototypes/5-class-inheritance/class-inheritance-rabbit-animal.png index d15e6d0e..09d18806 100644 Binary files a/1-js/9-prototypes/5-class-inheritance/class-inheritance-rabbit-animal.png and b/1-js/9-prototypes/5-class-inheritance/class-inheritance-rabbit-animal.png differ diff --git a/1-js/9-prototypes/5-class-inheritance/class-inheritance-rabbit-animal@2x.png b/1-js/9-prototypes/5-class-inheritance/class-inheritance-rabbit-animal@2x.png index 2a4af278..52518f91 100644 Binary files a/1-js/9-prototypes/5-class-inheritance/class-inheritance-rabbit-animal@2x.png and b/1-js/9-prototypes/5-class-inheritance/class-inheritance-rabbit-animal@2x.png differ diff --git a/1-js/9-prototypes/5-class-inheritance/class-inheritance-rabbit-run-animal.png b/1-js/9-prototypes/5-class-inheritance/class-inheritance-rabbit-run-animal.png index 97320064..5c669a71 100644 Binary files a/1-js/9-prototypes/5-class-inheritance/class-inheritance-rabbit-run-animal.png and b/1-js/9-prototypes/5-class-inheritance/class-inheritance-rabbit-run-animal.png differ diff --git a/1-js/9-prototypes/5-class-inheritance/class-inheritance-rabbit-run-animal@2x.png b/1-js/9-prototypes/5-class-inheritance/class-inheritance-rabbit-run-animal@2x.png index e9d40e80..4583fbc0 100644 Binary files a/1-js/9-prototypes/5-class-inheritance/class-inheritance-rabbit-run-animal@2x.png and b/1-js/9-prototypes/5-class-inheritance/class-inheritance-rabbit-run-animal@2x.png differ diff --git a/10-regular-expressions-javascript/3-regexp-character-classes/hello-java-boundaries.png b/10-regular-expressions-javascript/3-regexp-character-classes/hello-java-boundaries.png index 389238ba..3a47f13c 100644 Binary files a/10-regular-expressions-javascript/3-regexp-character-classes/hello-java-boundaries.png and b/10-regular-expressions-javascript/3-regexp-character-classes/hello-java-boundaries.png differ diff --git a/10-regular-expressions-javascript/3-regexp-character-classes/hello-java-boundaries@2x.png b/10-regular-expressions-javascript/3-regexp-character-classes/hello-java-boundaries@2x.png index f63ccce1..e8f14d87 100644 Binary files a/10-regular-expressions-javascript/3-regexp-character-classes/hello-java-boundaries@2x.png and b/10-regular-expressions-javascript/3-regexp-character-classes/hello-java-boundaries@2x.png differ diff --git a/10-regular-expressions-javascript/3-regexp-character-classes/love-html5-classes.png b/10-regular-expressions-javascript/3-regexp-character-classes/love-html5-classes.png index 94914986..387fac9d 100644 Binary files a/10-regular-expressions-javascript/3-regexp-character-classes/love-html5-classes.png and b/10-regular-expressions-javascript/3-regexp-character-classes/love-html5-classes.png differ diff --git a/10-regular-expressions-javascript/3-regexp-character-classes/love-html5-classes@2x.png b/10-regular-expressions-javascript/3-regexp-character-classes/love-html5-classes@2x.png index 0efd99c4..f5b3e380 100644 Binary files a/10-regular-expressions-javascript/3-regexp-character-classes/love-html5-classes@2x.png and b/10-regular-expressions-javascript/3-regexp-character-classes/love-html5-classes@2x.png differ diff --git a/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_greedy1.png b/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_greedy1.png index e50c8a78..a4fc2c4f 100644 Binary files a/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_greedy1.png and b/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_greedy1.png differ diff --git a/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_greedy1@2x.png b/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_greedy1@2x.png index 784f8619..e1b2ca0a 100644 Binary files a/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_greedy1@2x.png and b/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_greedy1@2x.png differ diff --git a/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_greedy2.png b/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_greedy2.png index a6098797..b7b84c1b 100644 Binary files a/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_greedy2.png and b/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_greedy2.png differ diff --git a/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_greedy2@2x.png b/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_greedy2@2x.png index 3af62e72..ce87d89e 100644 Binary files a/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_greedy2@2x.png and b/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_greedy2@2x.png differ diff --git a/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_greedy3.png b/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_greedy3.png index 1e9fb351..0e5b07fd 100644 Binary files a/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_greedy3.png and b/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_greedy3.png differ diff --git a/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_greedy3@2x.png b/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_greedy3@2x.png index 65c803a1..975fc49c 100644 Binary files a/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_greedy3@2x.png and b/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_greedy3@2x.png differ diff --git a/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_greedy4.png b/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_greedy4.png index ab01ea11..0ca3df76 100644 Binary files a/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_greedy4.png and b/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_greedy4.png differ diff --git a/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_greedy4@2x.png b/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_greedy4@2x.png index e8c1720e..fe514d4d 100644 Binary files a/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_greedy4@2x.png and b/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_greedy4@2x.png differ diff --git a/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_greedy5.png b/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_greedy5.png index 392c08c5..43b01a9a 100644 Binary files a/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_greedy5.png and b/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_greedy5.png differ diff --git a/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_greedy5@2x.png b/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_greedy5@2x.png index c2e7957f..353f69e2 100644 Binary files a/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_greedy5@2x.png and b/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_greedy5@2x.png differ diff --git a/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_greedy6.png b/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_greedy6.png index f3468b5b..2ae63d20 100644 Binary files a/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_greedy6.png and b/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_greedy6.png differ diff --git a/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_greedy6@2x.png b/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_greedy6@2x.png index f97d6b1b..5b09faa0 100644 Binary files a/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_greedy6@2x.png and b/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_greedy6@2x.png differ diff --git a/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_lazy3.png b/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_lazy3.png index 44428a58..af0482bb 100644 Binary files a/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_lazy3.png and b/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_lazy3.png differ diff --git a/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_lazy3@2x.png b/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_lazy3@2x.png index c382f72e..7d5fd2c6 100644 Binary files a/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_lazy3@2x.png and b/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_lazy3@2x.png differ diff --git a/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_lazy4.png b/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_lazy4.png index 0643026e..920530bd 100644 Binary files a/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_lazy4.png and b/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_lazy4.png differ diff --git a/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_lazy4@2x.png b/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_lazy4@2x.png index ac35b57c..1e14c11c 100644 Binary files a/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_lazy4@2x.png and b/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_lazy4@2x.png differ diff --git a/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_lazy5.png b/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_lazy5.png index 55d4ff05..0a07eeae 100644 Binary files a/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_lazy5.png and b/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_lazy5.png differ diff --git a/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_lazy5@2x.png b/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_lazy5@2x.png index 4d38af43..8c9ff19f 100644 Binary files a/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_lazy5@2x.png and b/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_lazy5@2x.png differ diff --git a/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_lazy6.png b/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_lazy6.png index 1da403d9..67f0d27a 100644 Binary files a/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_lazy6.png and b/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_lazy6.png differ diff --git a/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_lazy6@2x.png b/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_lazy6@2x.png index 898603b0..e7eb1aa0 100644 Binary files a/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_lazy6@2x.png and b/10-regular-expressions-javascript/6-regexp-greedy-and-lazy/witch_lazy6@2x.png differ diff --git a/10-regular-expressions-javascript/7-regexp-groups/regexp-nested-groups.png b/10-regular-expressions-javascript/7-regexp-groups/regexp-nested-groups.png index 1c92585a..9103ea28 100644 Binary files a/10-regular-expressions-javascript/7-regexp-groups/regexp-nested-groups.png and b/10-regular-expressions-javascript/7-regexp-groups/regexp-nested-groups.png differ diff --git a/10-regular-expressions-javascript/7-regexp-groups/regexp-nested-groups@2x.png b/10-regular-expressions-javascript/7-regexp-groups/regexp-nested-groups@2x.png index 840bb2c4..4f5ee487 100644 Binary files a/10-regular-expressions-javascript/7-regexp-groups/regexp-nested-groups@2x.png and b/10-regular-expressions-javascript/7-regexp-groups/regexp-nested-groups@2x.png differ diff --git a/2-ui/1-document/1-browser-environment/windowObjects.png b/2-ui/1-document/1-browser-environment/windowObjects.png index 91d2ef32..8c499eac 100644 Binary files a/2-ui/1-document/1-browser-environment/windowObjects.png and b/2-ui/1-document/1-browser-environment/windowObjects.png differ diff --git a/2-ui/1-document/1-browser-environment/windowObjects@2x.png b/2-ui/1-document/1-browser-environment/windowObjects@2x.png index 574ef4bb..0e9ba1e5 100644 Binary files a/2-ui/1-document/1-browser-environment/windowObjects@2x.png and b/2-ui/1-document/1-browser-environment/windowObjects@2x.png differ diff --git a/2-ui/1-document/15-metrics/metric-all.png b/2-ui/1-document/15-metrics/metric-all.png index 1123ff42..fb7c3b7b 100644 Binary files a/2-ui/1-document/15-metrics/metric-all.png and b/2-ui/1-document/15-metrics/metric-all.png differ diff --git a/2-ui/1-document/15-metrics/metric-all@2x.png b/2-ui/1-document/15-metrics/metric-all@2x.png index 05cf6882..bb10d86e 100644 Binary files a/2-ui/1-document/15-metrics/metric-all@2x.png and b/2-ui/1-document/15-metrics/metric-all@2x.png differ diff --git a/2-ui/1-document/15-metrics/metric-client-left-top-rtl.png b/2-ui/1-document/15-metrics/metric-client-left-top-rtl.png index 96b13d93..c934fb23 100644 Binary files a/2-ui/1-document/15-metrics/metric-client-left-top-rtl.png and b/2-ui/1-document/15-metrics/metric-client-left-top-rtl.png differ diff --git a/2-ui/1-document/15-metrics/metric-client-left-top-rtl@2x.png b/2-ui/1-document/15-metrics/metric-client-left-top-rtl@2x.png index 7c722924..4cc5b4a1 100644 Binary files a/2-ui/1-document/15-metrics/metric-client-left-top-rtl@2x.png and b/2-ui/1-document/15-metrics/metric-client-left-top-rtl@2x.png differ diff --git a/2-ui/1-document/15-metrics/metric-client-left-top.png b/2-ui/1-document/15-metrics/metric-client-left-top.png index 5d4bd5c2..b821043c 100644 Binary files a/2-ui/1-document/15-metrics/metric-client-left-top.png and b/2-ui/1-document/15-metrics/metric-client-left-top.png differ diff --git a/2-ui/1-document/15-metrics/metric-client-left-top@2x.png b/2-ui/1-document/15-metrics/metric-client-left-top@2x.png index e5c06503..afcdcdf8 100644 Binary files a/2-ui/1-document/15-metrics/metric-client-left-top@2x.png and b/2-ui/1-document/15-metrics/metric-client-left-top@2x.png differ diff --git a/2-ui/1-document/15-metrics/metric-client-width-height.png b/2-ui/1-document/15-metrics/metric-client-width-height.png index 9c12fedb..e2112da6 100644 Binary files a/2-ui/1-document/15-metrics/metric-client-width-height.png and b/2-ui/1-document/15-metrics/metric-client-width-height.png differ diff --git a/2-ui/1-document/15-metrics/metric-client-width-height@2x.png b/2-ui/1-document/15-metrics/metric-client-width-height@2x.png index bb0ad1f9..55168738 100644 Binary files a/2-ui/1-document/15-metrics/metric-client-width-height@2x.png and b/2-ui/1-document/15-metrics/metric-client-width-height@2x.png differ diff --git a/2-ui/1-document/15-metrics/metric-client-width-nopadding.png b/2-ui/1-document/15-metrics/metric-client-width-nopadding.png index 464d769c..f715c8ff 100644 Binary files a/2-ui/1-document/15-metrics/metric-client-width-nopadding.png and b/2-ui/1-document/15-metrics/metric-client-width-nopadding.png differ diff --git a/2-ui/1-document/15-metrics/metric-client-width-nopadding@2x.png b/2-ui/1-document/15-metrics/metric-client-width-nopadding@2x.png index bd266425..316bec7b 100644 Binary files a/2-ui/1-document/15-metrics/metric-client-width-nopadding@2x.png and b/2-ui/1-document/15-metrics/metric-client-width-nopadding@2x.png differ diff --git a/2-ui/1-document/15-metrics/metric-css.png b/2-ui/1-document/15-metrics/metric-css.png index c6346008..d1a219ee 100644 Binary files a/2-ui/1-document/15-metrics/metric-css.png and b/2-ui/1-document/15-metrics/metric-css.png differ diff --git a/2-ui/1-document/15-metrics/metric-css@2x.png b/2-ui/1-document/15-metrics/metric-css@2x.png index 1b666b05..28cde46d 100644 Binary files a/2-ui/1-document/15-metrics/metric-css@2x.png and b/2-ui/1-document/15-metrics/metric-css@2x.png differ diff --git a/2-ui/1-document/15-metrics/metric-offset-parent.png b/2-ui/1-document/15-metrics/metric-offset-parent.png index a4e29c93..a9711549 100644 Binary files a/2-ui/1-document/15-metrics/metric-offset-parent.png and b/2-ui/1-document/15-metrics/metric-offset-parent.png differ diff --git a/2-ui/1-document/15-metrics/metric-offset-parent@2x.png b/2-ui/1-document/15-metrics/metric-offset-parent@2x.png index e5600792..df6799ef 100644 Binary files a/2-ui/1-document/15-metrics/metric-offset-parent@2x.png and b/2-ui/1-document/15-metrics/metric-offset-parent@2x.png differ diff --git a/2-ui/1-document/15-metrics/metric-offset-width-height.png b/2-ui/1-document/15-metrics/metric-offset-width-height.png index 402e53fa..84c331e2 100644 Binary files a/2-ui/1-document/15-metrics/metric-offset-width-height.png and b/2-ui/1-document/15-metrics/metric-offset-width-height.png differ diff --git a/2-ui/1-document/15-metrics/metric-offset-width-height@2x.png b/2-ui/1-document/15-metrics/metric-offset-width-height@2x.png index 842f7860..6f3c9c53 100644 Binary files a/2-ui/1-document/15-metrics/metric-offset-width-height@2x.png and b/2-ui/1-document/15-metrics/metric-offset-width-height@2x.png differ diff --git a/2-ui/1-document/15-metrics/metric-scroll-top.png b/2-ui/1-document/15-metrics/metric-scroll-top.png index 6dbaced9..b65a6406 100644 Binary files a/2-ui/1-document/15-metrics/metric-scroll-top.png and b/2-ui/1-document/15-metrics/metric-scroll-top.png differ diff --git a/2-ui/1-document/15-metrics/metric-scroll-top@2x.png b/2-ui/1-document/15-metrics/metric-scroll-top@2x.png index 3d13f6f9..539cd979 100644 Binary files a/2-ui/1-document/15-metrics/metric-scroll-top@2x.png and b/2-ui/1-document/15-metrics/metric-scroll-top@2x.png differ diff --git a/2-ui/1-document/15-metrics/metric-scroll-width-height.png b/2-ui/1-document/15-metrics/metric-scroll-width-height.png index ff1629d7..cdec4be7 100644 Binary files a/2-ui/1-document/15-metrics/metric-scroll-width-height.png and b/2-ui/1-document/15-metrics/metric-scroll-width-height.png differ diff --git a/2-ui/1-document/15-metrics/metric-scroll-width-height@2x.png b/2-ui/1-document/15-metrics/metric-scroll-width-height@2x.png index 4f724e9b..b4b9cb43 100644 Binary files a/2-ui/1-document/15-metrics/metric-scroll-width-height@2x.png and b/2-ui/1-document/15-metrics/metric-scroll-width-height@2x.png differ diff --git a/2-ui/1-document/16-metrics-window/document-client-width-height.png b/2-ui/1-document/16-metrics-window/document-client-width-height.png index 66c7200a..49360367 100644 Binary files a/2-ui/1-document/16-metrics-window/document-client-width-height.png and b/2-ui/1-document/16-metrics-window/document-client-width-height.png differ diff --git a/2-ui/1-document/16-metrics-window/document-client-width-height@2x.png b/2-ui/1-document/16-metrics-window/document-client-width-height@2x.png index f9c7d72c..7f3584f2 100644 Binary files a/2-ui/1-document/16-metrics-window/document-client-width-height@2x.png and b/2-ui/1-document/16-metrics-window/document-client-width-height@2x.png differ diff --git a/2-ui/1-document/17-coordinates/coords.png b/2-ui/1-document/17-coordinates/coords.png index 449ff658..01620d5e 100644 Binary files a/2-ui/1-document/17-coordinates/coords.png and b/2-ui/1-document/17-coordinates/coords.png differ diff --git a/2-ui/1-document/17-coordinates/coords@2x.png b/2-ui/1-document/17-coordinates/coords@2x.png index 7636420a..c1245744 100644 Binary files a/2-ui/1-document/17-coordinates/coords@2x.png and b/2-ui/1-document/17-coordinates/coords@2x.png differ diff --git a/2-ui/1-document/4-traversing-dom/dom-links-elements.png b/2-ui/1-document/4-traversing-dom/dom-links-elements.png index 60f1302d..8683e6e7 100644 Binary files a/2-ui/1-document/4-traversing-dom/dom-links-elements.png and b/2-ui/1-document/4-traversing-dom/dom-links-elements.png differ diff --git a/2-ui/1-document/4-traversing-dom/dom-links-elements@2x.png b/2-ui/1-document/4-traversing-dom/dom-links-elements@2x.png index 88caef0a..3331f572 100644 Binary files a/2-ui/1-document/4-traversing-dom/dom-links-elements@2x.png and b/2-ui/1-document/4-traversing-dom/dom-links-elements@2x.png differ diff --git a/2-ui/1-document/4-traversing-dom/dom-links.png b/2-ui/1-document/4-traversing-dom/dom-links.png index bd77623f..f5b2b707 100644 Binary files a/2-ui/1-document/4-traversing-dom/dom-links.png and b/2-ui/1-document/4-traversing-dom/dom-links.png differ diff --git a/2-ui/1-document/4-traversing-dom/dom-links@2x.png b/2-ui/1-document/4-traversing-dom/dom-links@2x.png index 7da3a684..bbd339ff 100644 Binary files a/2-ui/1-document/4-traversing-dom/dom-links@2x.png and b/2-ui/1-document/4-traversing-dom/dom-links@2x.png differ diff --git a/2-ui/2-events-and-interfaces/1-introduction-browser-events/6-carousel/carousel1.png b/2-ui/2-events-and-interfaces/1-introduction-browser-events/6-carousel/carousel1.png index 0628d64f..fd663ca3 100644 Binary files a/2-ui/2-events-and-interfaces/1-introduction-browser-events/6-carousel/carousel1.png and b/2-ui/2-events-and-interfaces/1-introduction-browser-events/6-carousel/carousel1.png differ diff --git a/2-ui/2-events-and-interfaces/1-introduction-browser-events/6-carousel/carousel1@2x.png b/2-ui/2-events-and-interfaces/1-introduction-browser-events/6-carousel/carousel1@2x.png index 29e960c4..d906e5b5 100644 Binary files a/2-ui/2-events-and-interfaces/1-introduction-browser-events/6-carousel/carousel1@2x.png and b/2-ui/2-events-and-interfaces/1-introduction-browser-events/6-carousel/carousel1@2x.png differ diff --git a/2-ui/2-events-and-interfaces/1-introduction-browser-events/6-carousel/carousel2.png b/2-ui/2-events-and-interfaces/1-introduction-browser-events/6-carousel/carousel2.png index 361c9f80..a51acd6e 100644 Binary files a/2-ui/2-events-and-interfaces/1-introduction-browser-events/6-carousel/carousel2.png and b/2-ui/2-events-and-interfaces/1-introduction-browser-events/6-carousel/carousel2.png differ diff --git a/2-ui/2-events-and-interfaces/1-introduction-browser-events/6-carousel/carousel2@2x.png b/2-ui/2-events-and-interfaces/1-introduction-browser-events/6-carousel/carousel2@2x.png index 7ab80b41..22412326 100644 Binary files a/2-ui/2-events-and-interfaces/1-introduction-browser-events/6-carousel/carousel2@2x.png and b/2-ui/2-events-and-interfaces/1-introduction-browser-events/6-carousel/carousel2@2x.png differ diff --git a/2-ui/2-events-and-interfaces/4-event-bubbling/event-order-bubbling.png b/2-ui/2-events-and-interfaces/4-event-bubbling/event-order-bubbling.png index dbf398aa..cdf5835e 100644 Binary files a/2-ui/2-events-and-interfaces/4-event-bubbling/event-order-bubbling.png and b/2-ui/2-events-and-interfaces/4-event-bubbling/event-order-bubbling.png differ diff --git a/2-ui/2-events-and-interfaces/4-event-bubbling/event-order-bubbling@2x.png b/2-ui/2-events-and-interfaces/4-event-bubbling/event-order-bubbling@2x.png index aea9778e..668abfdb 100644 Binary files a/2-ui/2-events-and-interfaces/4-event-bubbling/event-order-bubbling@2x.png and b/2-ui/2-events-and-interfaces/4-event-bubbling/event-order-bubbling@2x.png differ diff --git a/2-ui/2-events-and-interfaces/4-event-bubbling/eventflow.png b/2-ui/2-events-and-interfaces/4-event-bubbling/eventflow.png index 1444fd8d..e9527ccb 100644 Binary files a/2-ui/2-events-and-interfaces/4-event-bubbling/eventflow.png and b/2-ui/2-events-and-interfaces/4-event-bubbling/eventflow.png differ diff --git a/2-ui/2-events-and-interfaces/4-event-bubbling/eventflow@2x.png b/2-ui/2-events-and-interfaces/4-event-bubbling/eventflow@2x.png index 6f9a0cf8..71b918b6 100644 Binary files a/2-ui/2-events-and-interfaces/4-event-bubbling/eventflow@2x.png and b/2-ui/2-events-and-interfaces/4-event-bubbling/eventflow@2x.png differ diff --git a/2-ui/2-events-and-interfaces/5-event-delegation/bagua-bubble.png b/2-ui/2-events-and-interfaces/5-event-delegation/bagua-bubble.png index 0db74bf0..67872b9e 100644 Binary files a/2-ui/2-events-and-interfaces/5-event-delegation/bagua-bubble.png and b/2-ui/2-events-and-interfaces/5-event-delegation/bagua-bubble.png differ diff --git a/2-ui/2-events-and-interfaces/5-event-delegation/bagua-bubble@2x.png b/2-ui/2-events-and-interfaces/5-event-delegation/bagua-bubble@2x.png index 9c49d6bf..98fb51ac 100644 Binary files a/2-ui/2-events-and-interfaces/5-event-delegation/bagua-bubble@2x.png and b/2-ui/2-events-and-interfaces/5-event-delegation/bagua-bubble@2x.png differ diff --git a/2-ui/3-event-details/3-mousemove-mouseover-mouseout-mouseenter-mouseleave/mouseover-mouseout-from-outside.png b/2-ui/3-event-details/3-mousemove-mouseover-mouseout-mouseenter-mouseleave/mouseover-mouseout-from-outside.png index b5279266..04000687 100644 Binary files a/2-ui/3-event-details/3-mousemove-mouseover-mouseout-mouseenter-mouseleave/mouseover-mouseout-from-outside.png and b/2-ui/3-event-details/3-mousemove-mouseover-mouseout-mouseenter-mouseleave/mouseover-mouseout-from-outside.png differ diff --git a/2-ui/3-event-details/3-mousemove-mouseover-mouseout-mouseenter-mouseleave/mouseover-mouseout-from-outside@2x.png b/2-ui/3-event-details/3-mousemove-mouseover-mouseout-mouseenter-mouseleave/mouseover-mouseout-from-outside@2x.png index b1f49427..022d169d 100644 Binary files a/2-ui/3-event-details/3-mousemove-mouseover-mouseout-mouseenter-mouseleave/mouseover-mouseout-from-outside@2x.png and b/2-ui/3-event-details/3-mousemove-mouseover-mouseout-mouseenter-mouseleave/mouseover-mouseout-from-outside@2x.png differ diff --git a/2-ui/3-event-details/3-mousemove-mouseover-mouseout-mouseenter-mouseleave/mouseover-mouseout-over-elems.png b/2-ui/3-event-details/3-mousemove-mouseover-mouseout-mouseenter-mouseleave/mouseover-mouseout-over-elems.png index 380619c1..ac003f9b 100644 Binary files a/2-ui/3-event-details/3-mousemove-mouseover-mouseout-mouseenter-mouseleave/mouseover-mouseout-over-elems.png and b/2-ui/3-event-details/3-mousemove-mouseover-mouseout-mouseenter-mouseleave/mouseover-mouseout-over-elems.png differ diff --git a/2-ui/3-event-details/3-mousemove-mouseover-mouseout-mouseenter-mouseleave/mouseover-mouseout-over-elems@2x.png b/2-ui/3-event-details/3-mousemove-mouseover-mouseout-mouseenter-mouseleave/mouseover-mouseout-over-elems@2x.png index 9520e250..65ce484c 100644 Binary files a/2-ui/3-event-details/3-mousemove-mouseover-mouseout-mouseenter-mouseleave/mouseover-mouseout-over-elems@2x.png and b/2-ui/3-event-details/3-mousemove-mouseover-mouseout-mouseenter-mouseleave/mouseover-mouseout-over-elems@2x.png differ diff --git a/2-ui/3-event-details/3-mousemove-mouseover-mouseout-mouseenter-mouseleave/mouseover-mouseout.png b/2-ui/3-event-details/3-mousemove-mouseover-mouseout-mouseenter-mouseleave/mouseover-mouseout.png index da759819..789ad11d 100644 Binary files a/2-ui/3-event-details/3-mousemove-mouseover-mouseout-mouseenter-mouseleave/mouseover-mouseout.png and b/2-ui/3-event-details/3-mousemove-mouseover-mouseout-mouseenter-mouseleave/mouseover-mouseout.png differ diff --git a/2-ui/3-event-details/3-mousemove-mouseover-mouseout-mouseenter-mouseleave/mouseover-mouseout@2x.png b/2-ui/3-event-details/3-mousemove-mouseover-mouseout-mouseenter-mouseleave/mouseover-mouseout@2x.png index be05bb08..09e8dea3 100644 Binary files a/2-ui/3-event-details/3-mousemove-mouseover-mouseout-mouseenter-mouseleave/mouseover-mouseout@2x.png and b/2-ui/3-event-details/3-mousemove-mouseover-mouseout-mouseenter-mouseleave/mouseover-mouseout@2x.png differ diff --git a/2-ui/3-event-details/3-mousemove-mouseover-mouseout-mouseenter-mouseleave/mouseover-to-child.png b/2-ui/3-event-details/3-mousemove-mouseover-mouseout-mouseenter-mouseleave/mouseover-to-child.png index 07e3ddf8..00a433d6 100644 Binary files a/2-ui/3-event-details/3-mousemove-mouseover-mouseout-mouseenter-mouseleave/mouseover-to-child.png and b/2-ui/3-event-details/3-mousemove-mouseover-mouseout-mouseenter-mouseleave/mouseover-to-child.png differ diff --git a/2-ui/3-event-details/3-mousemove-mouseover-mouseout-mouseenter-mouseleave/mouseover-to-child@2x.png b/2-ui/3-event-details/3-mousemove-mouseover-mouseout-mouseenter-mouseleave/mouseover-to-child@2x.png index c04603f7..39b9561e 100644 Binary files a/2-ui/3-event-details/3-mousemove-mouseover-mouseout-mouseenter-mouseleave/mouseover-to-child@2x.png and b/2-ui/3-event-details/3-mousemove-mouseover-mouseout-mouseenter-mouseleave/mouseover-to-child@2x.png differ diff --git a/4-ajax/5-xhr-crossdomain/xhr-another-domain.png b/4-ajax/5-xhr-crossdomain/xhr-another-domain.png index cfc1f3cb..f24acf97 100644 Binary files a/4-ajax/5-xhr-crossdomain/xhr-another-domain.png and b/4-ajax/5-xhr-crossdomain/xhr-another-domain.png differ diff --git a/4-ajax/5-xhr-crossdomain/xhr-another-domain@2x.png b/4-ajax/5-xhr-crossdomain/xhr-another-domain@2x.png index 98daf1c0..c5564287 100644 Binary files a/4-ajax/5-xhr-crossdomain/xhr-another-domain@2x.png and b/4-ajax/5-xhr-crossdomain/xhr-another-domain@2x.png differ diff --git a/4-ajax/5-xhr-crossdomain/xhr-preflight.png b/4-ajax/5-xhr-crossdomain/xhr-preflight.png index bf7777b9..365dd66e 100644 Binary files a/4-ajax/5-xhr-crossdomain/xhr-preflight.png and b/4-ajax/5-xhr-crossdomain/xhr-preflight.png differ diff --git a/4-ajax/5-xhr-crossdomain/xhr-preflight@2x.png b/4-ajax/5-xhr-crossdomain/xhr-preflight@2x.png index 66543fc5..707ba32a 100644 Binary files a/4-ajax/5-xhr-crossdomain/xhr-preflight@2x.png and b/4-ajax/5-xhr-crossdomain/xhr-preflight@2x.png differ diff --git a/5-animation/1-bezier/bezier-car.png b/5-animation/1-bezier/bezier-car.png index d44b122d..47c74925 100644 Binary files a/5-animation/1-bezier/bezier-car.png and b/5-animation/1-bezier/bezier-car.png differ diff --git a/5-animation/1-bezier/bezier-car@2x.png b/5-animation/1-bezier/bezier-car@2x.png index 93e62492..a67408f8 100644 Binary files a/5-animation/1-bezier/bezier-car@2x.png and b/5-animation/1-bezier/bezier-car@2x.png differ diff --git a/5-animation/1-bezier/bezier-letter.png b/5-animation/1-bezier/bezier-letter.png index a1918c7d..90a838b3 100644 Binary files a/5-animation/1-bezier/bezier-letter.png and b/5-animation/1-bezier/bezier-letter.png differ diff --git a/5-animation/1-bezier/bezier-letter@2x.png b/5-animation/1-bezier/bezier-letter@2x.png index e547e25b..f2ddda84 100644 Binary files a/5-animation/1-bezier/bezier-letter@2x.png and b/5-animation/1-bezier/bezier-letter@2x.png differ diff --git a/5-animation/1-bezier/bezier-vase.png b/5-animation/1-bezier/bezier-vase.png index 9b4845fd..895e4ea4 100644 Binary files a/5-animation/1-bezier/bezier-vase.png and b/5-animation/1-bezier/bezier-vase.png differ diff --git a/5-animation/1-bezier/bezier-vase@2x.png b/5-animation/1-bezier/bezier-vase@2x.png index 45b7f60d..3b8792a4 100644 Binary files a/5-animation/1-bezier/bezier-vase@2x.png and b/5-animation/1-bezier/bezier-vase@2x.png differ diff --git a/5-animation/1-bezier/bezier2.png b/5-animation/1-bezier/bezier2.png index 55390aa7..774dfe41 100644 Binary files a/5-animation/1-bezier/bezier2.png and b/5-animation/1-bezier/bezier2.png differ diff --git a/5-animation/1-bezier/bezier2@2x.png b/5-animation/1-bezier/bezier2@2x.png index 0dd6a58f..de0d5951 100644 Binary files a/5-animation/1-bezier/bezier2@2x.png and b/5-animation/1-bezier/bezier2@2x.png differ diff --git a/5-animation/1-bezier/bezier3-draw1.png b/5-animation/1-bezier/bezier3-draw1.png index ce6e6722..5d2a70a4 100644 Binary files a/5-animation/1-bezier/bezier3-draw1.png and b/5-animation/1-bezier/bezier3-draw1.png differ diff --git a/5-animation/1-bezier/bezier3-draw1@2x.png b/5-animation/1-bezier/bezier3-draw1@2x.png index f0b647c0..5035c8b6 100644 Binary files a/5-animation/1-bezier/bezier3-draw1@2x.png and b/5-animation/1-bezier/bezier3-draw1@2x.png differ diff --git a/5-animation/1-bezier/bezier3-draw2.png b/5-animation/1-bezier/bezier3-draw2.png index fce36919..f93fc6ed 100644 Binary files a/5-animation/1-bezier/bezier3-draw2.png and b/5-animation/1-bezier/bezier3-draw2.png differ diff --git a/5-animation/1-bezier/bezier3-draw2@2x.png b/5-animation/1-bezier/bezier3-draw2@2x.png index 16d2e91f..379217a9 100644 Binary files a/5-animation/1-bezier/bezier3-draw2@2x.png and b/5-animation/1-bezier/bezier3-draw2@2x.png differ diff --git a/5-animation/1-bezier/bezier3-e.png b/5-animation/1-bezier/bezier3-e.png index bc50de79..5d2fda1d 100644 Binary files a/5-animation/1-bezier/bezier3-e.png and b/5-animation/1-bezier/bezier3-e.png differ diff --git a/5-animation/1-bezier/bezier3-e@2x.png b/5-animation/1-bezier/bezier3-e@2x.png index 15648e08..e815647b 100644 Binary files a/5-animation/1-bezier/bezier3-e@2x.png and b/5-animation/1-bezier/bezier3-e@2x.png differ diff --git a/5-animation/1-bezier/bezier3.png b/5-animation/1-bezier/bezier3.png index e7a2a07f..25868da9 100644 Binary files a/5-animation/1-bezier/bezier3.png and b/5-animation/1-bezier/bezier3.png differ diff --git a/5-animation/1-bezier/bezier3@2x.png b/5-animation/1-bezier/bezier3@2x.png index 010f5eae..0d1cc6ea 100644 Binary files a/5-animation/1-bezier/bezier3@2x.png and b/5-animation/1-bezier/bezier3@2x.png differ diff --git a/5-animation/1-bezier/bezier4-e.png b/5-animation/1-bezier/bezier4-e.png index acaa9838..f3719421 100644 Binary files a/5-animation/1-bezier/bezier4-e.png and b/5-animation/1-bezier/bezier4-e.png differ diff --git a/5-animation/1-bezier/bezier4-e@2x.png b/5-animation/1-bezier/bezier4-e@2x.png index 338c9f6c..3a8a1a54 100644 Binary files a/5-animation/1-bezier/bezier4-e@2x.png and b/5-animation/1-bezier/bezier4-e@2x.png differ diff --git a/5-animation/1-bezier/bezier4.png b/5-animation/1-bezier/bezier4.png index 6fb00bdb..4e1906d1 100644 Binary files a/5-animation/1-bezier/bezier4.png and b/5-animation/1-bezier/bezier4.png differ diff --git a/5-animation/1-bezier/bezier4@2x.png b/5-animation/1-bezier/bezier4@2x.png index 64f40452..4987ecbc 100644 Binary files a/5-animation/1-bezier/bezier4@2x.png and b/5-animation/1-bezier/bezier4@2x.png differ diff --git a/5-animation/2-css-transitions/2-animate-logo-bezier-css/bezier-up.png b/5-animation/2-css-transitions/2-animate-logo-bezier-css/bezier-up.png index 0f220df3..e7b9aafb 100644 Binary files a/5-animation/2-css-transitions/2-animate-logo-bezier-css/bezier-up.png and b/5-animation/2-css-transitions/2-animate-logo-bezier-css/bezier-up.png differ diff --git a/5-animation/2-css-transitions/2-animate-logo-bezier-css/bezier-up@2x.png b/5-animation/2-css-transitions/2-animate-logo-bezier-css/bezier-up@2x.png index 3d7b3a51..552832bd 100644 Binary files a/5-animation/2-css-transitions/2-animate-logo-bezier-css/bezier-up@2x.png and b/5-animation/2-css-transitions/2-animate-logo-bezier-css/bezier-up@2x.png differ diff --git a/5-animation/2-css-transitions/bezier-linear.png b/5-animation/2-css-transitions/bezier-linear.png index 656e7b6b..908e13dd 100644 Binary files a/5-animation/2-css-transitions/bezier-linear.png and b/5-animation/2-css-transitions/bezier-linear.png differ diff --git a/5-animation/2-css-transitions/bezier-linear@2x.png b/5-animation/2-css-transitions/bezier-linear@2x.png index 5d7f1878..31e7ae8e 100644 Binary files a/5-animation/2-css-transitions/bezier-linear@2x.png and b/5-animation/2-css-transitions/bezier-linear@2x.png differ diff --git a/5-animation/2-css-transitions/bezier-train-over.png b/5-animation/2-css-transitions/bezier-train-over.png index 679ab03d..3eb229a1 100644 Binary files a/5-animation/2-css-transitions/bezier-train-over.png and b/5-animation/2-css-transitions/bezier-train-over.png differ diff --git a/5-animation/2-css-transitions/bezier-train-over@2x.png b/5-animation/2-css-transitions/bezier-train-over@2x.png index 5d0b66fc..967df98a 100644 Binary files a/5-animation/2-css-transitions/bezier-train-over@2x.png and b/5-animation/2-css-transitions/bezier-train-over@2x.png differ diff --git a/5-animation/2-css-transitions/ease-in-out.png b/5-animation/2-css-transitions/ease-in-out.png index 5a9b9691..9951f9ae 100644 Binary files a/5-animation/2-css-transitions/ease-in-out.png and b/5-animation/2-css-transitions/ease-in-out.png differ diff --git a/5-animation/2-css-transitions/ease-in-out@2x.png b/5-animation/2-css-transitions/ease-in-out@2x.png index cd65d5df..4c17a492 100644 Binary files a/5-animation/2-css-transitions/ease-in-out@2x.png and b/5-animation/2-css-transitions/ease-in-out@2x.png differ diff --git a/5-animation/2-css-transitions/ease-in.png b/5-animation/2-css-transitions/ease-in.png index dba7a8b2..daf24ccf 100644 Binary files a/5-animation/2-css-transitions/ease-in.png and b/5-animation/2-css-transitions/ease-in.png differ diff --git a/5-animation/2-css-transitions/ease-in@2x.png b/5-animation/2-css-transitions/ease-in@2x.png index 6e76dcd6..d76bc939 100644 Binary files a/5-animation/2-css-transitions/ease-in@2x.png and b/5-animation/2-css-transitions/ease-in@2x.png differ diff --git a/5-animation/2-css-transitions/ease-out.png b/5-animation/2-css-transitions/ease-out.png index cc27d8aa..106b7411 100644 Binary files a/5-animation/2-css-transitions/ease-out.png and b/5-animation/2-css-transitions/ease-out.png differ diff --git a/5-animation/2-css-transitions/ease-out@2x.png b/5-animation/2-css-transitions/ease-out@2x.png index 2b554dc1..81e5bd36 100644 Binary files a/5-animation/2-css-transitions/ease-out@2x.png and b/5-animation/2-css-transitions/ease-out@2x.png differ diff --git a/5-animation/2-css-transitions/ease.png b/5-animation/2-css-transitions/ease.png index db6f06be..459d27b1 100644 Binary files a/5-animation/2-css-transitions/ease.png and b/5-animation/2-css-transitions/ease.png differ diff --git a/5-animation/2-css-transitions/ease@2x.png b/5-animation/2-css-transitions/ease@2x.png index 7b841ce8..b8e11784 100644 Binary files a/5-animation/2-css-transitions/ease@2x.png and b/5-animation/2-css-transitions/ease@2x.png differ diff --git a/5-animation/2-css-transitions/train-curve.png b/5-animation/2-css-transitions/train-curve.png index b81ce0b8..85298d62 100644 Binary files a/5-animation/2-css-transitions/train-curve.png and b/5-animation/2-css-transitions/train-curve.png differ diff --git a/5-animation/2-css-transitions/train-curve@2x.png b/5-animation/2-css-transitions/train-curve@2x.png index f37c377b..fa605db2 100644 Binary files a/5-animation/2-css-transitions/train-curve@2x.png and b/5-animation/2-css-transitions/train-curve@2x.png differ diff --git a/5-animation/3-js-animation/back.png b/5-animation/3-js-animation/back.png index 36b72ac5..79fce504 100644 Binary files a/5-animation/3-js-animation/back.png and b/5-animation/3-js-animation/back.png differ diff --git a/5-animation/3-js-animation/back@2x.png b/5-animation/3-js-animation/back@2x.png index 0762d2cd..4bfbe127 100644 Binary files a/5-animation/3-js-animation/back@2x.png and b/5-animation/3-js-animation/back@2x.png differ diff --git a/5-animation/3-js-animation/bezier-linear.png b/5-animation/3-js-animation/bezier-linear.png index 656e7b6b..908e13dd 100644 Binary files a/5-animation/3-js-animation/bezier-linear.png and b/5-animation/3-js-animation/bezier-linear.png differ diff --git a/5-animation/3-js-animation/bezier-linear@2x.png b/5-animation/3-js-animation/bezier-linear@2x.png index 5d7f1878..31e7ae8e 100644 Binary files a/5-animation/3-js-animation/bezier-linear@2x.png and b/5-animation/3-js-animation/bezier-linear@2x.png differ diff --git a/5-animation/3-js-animation/bounce-inout.png b/5-animation/3-js-animation/bounce-inout.png index fb9d46fb..ae0e4060 100644 Binary files a/5-animation/3-js-animation/bounce-inout.png and b/5-animation/3-js-animation/bounce-inout.png differ diff --git a/5-animation/3-js-animation/bounce-inout@2x.png b/5-animation/3-js-animation/bounce-inout@2x.png index 1cfb2c9f..697f4ad6 100644 Binary files a/5-animation/3-js-animation/bounce-inout@2x.png and b/5-animation/3-js-animation/bounce-inout@2x.png differ diff --git a/5-animation/3-js-animation/circ-ease.png b/5-animation/3-js-animation/circ-ease.png index 3adf1346..58e03f43 100644 Binary files a/5-animation/3-js-animation/circ-ease.png and b/5-animation/3-js-animation/circ-ease.png differ diff --git a/5-animation/3-js-animation/circ-ease@2x.png b/5-animation/3-js-animation/circ-ease@2x.png index c503fb28..8521f63c 100644 Binary files a/5-animation/3-js-animation/circ-ease@2x.png and b/5-animation/3-js-animation/circ-ease@2x.png differ diff --git a/5-animation/3-js-animation/circ.png b/5-animation/3-js-animation/circ.png index e19871c5..2b317b5b 100644 Binary files a/5-animation/3-js-animation/circ.png and b/5-animation/3-js-animation/circ.png differ diff --git a/5-animation/3-js-animation/circ@2x.png b/5-animation/3-js-animation/circ@2x.png index 5b2a7960..a3ba73e3 100644 Binary files a/5-animation/3-js-animation/circ@2x.png and b/5-animation/3-js-animation/circ@2x.png differ diff --git a/5-animation/3-js-animation/elastic.png b/5-animation/3-js-animation/elastic.png index 1603ba29..d7fa5ceb 100644 Binary files a/5-animation/3-js-animation/elastic.png and b/5-animation/3-js-animation/elastic.png differ diff --git a/5-animation/3-js-animation/elastic@2x.png b/5-animation/3-js-animation/elastic@2x.png index 6b8f4e1a..766393cc 100644 Binary files a/5-animation/3-js-animation/elastic@2x.png and b/5-animation/3-js-animation/elastic@2x.png differ diff --git a/5-animation/3-js-animation/linear.png b/5-animation/3-js-animation/linear.png index 205c5729..85612747 100644 Binary files a/5-animation/3-js-animation/linear.png and b/5-animation/3-js-animation/linear.png differ diff --git a/5-animation/3-js-animation/linear@2x.png b/5-animation/3-js-animation/linear@2x.png index 315ee18d..bea7f85d 100644 Binary files a/5-animation/3-js-animation/linear@2x.png and b/5-animation/3-js-animation/linear@2x.png differ diff --git a/5-animation/3-js-animation/quad.png b/5-animation/3-js-animation/quad.png index a1003207..b8ddfadd 100644 Binary files a/5-animation/3-js-animation/quad.png and b/5-animation/3-js-animation/quad.png differ diff --git a/5-animation/3-js-animation/quad@2x.png b/5-animation/3-js-animation/quad@2x.png index 4d7ba6a3..424b7904 100644 Binary files a/5-animation/3-js-animation/quad@2x.png and b/5-animation/3-js-animation/quad@2x.png differ diff --git a/5-animation/3-js-animation/quint.png b/5-animation/3-js-animation/quint.png index 78d82d83..1e120dc5 100644 Binary files a/5-animation/3-js-animation/quint.png and b/5-animation/3-js-animation/quint.png differ diff --git a/5-animation/3-js-animation/quint@2x.png b/5-animation/3-js-animation/quint@2x.png index f6169090..f4182dbf 100644 Binary files a/5-animation/3-js-animation/quint@2x.png and b/5-animation/3-js-animation/quint@2x.png differ diff --git a/6-optimize/4-memory-leaks/leak-xhr-2.png b/6-optimize/4-memory-leaks/leak-xhr-2.png index cd98c6cf..73090cf1 100644 Binary files a/6-optimize/4-memory-leaks/leak-xhr-2.png and b/6-optimize/4-memory-leaks/leak-xhr-2.png differ diff --git a/6-optimize/4-memory-leaks/leak-xhr-2@2x.png b/6-optimize/4-memory-leaks/leak-xhr-2@2x.png index ac6fedb9..803d9b87 100644 Binary files a/6-optimize/4-memory-leaks/leak-xhr-2@2x.png and b/6-optimize/4-memory-leaks/leak-xhr-2@2x.png differ diff --git a/6-optimize/4-memory-leaks/leak-xhr.png b/6-optimize/4-memory-leaks/leak-xhr.png index bfc4acf9..a649f114 100644 Binary files a/6-optimize/4-memory-leaks/leak-xhr.png and b/6-optimize/4-memory-leaks/leak-xhr.png differ diff --git a/6-optimize/4-memory-leaks/leak-xhr@2x.png b/6-optimize/4-memory-leaks/leak-xhr@2x.png index 25acf40a..e71fca8e 100644 Binary files a/6-optimize/4-memory-leaks/leak-xhr@2x.png and b/6-optimize/4-memory-leaks/leak-xhr@2x.png differ diff --git a/8-css-for-js/10-box-sizing/border-box.png b/8-css-for-js/10-box-sizing/border-box.png index c8f62118..d828c760 100644 Binary files a/8-css-for-js/10-box-sizing/border-box.png and b/8-css-for-js/10-box-sizing/border-box.png differ diff --git a/8-css-for-js/10-box-sizing/border-box@2x.png b/8-css-for-js/10-box-sizing/border-box@2x.png index 293fab37..b45ef3f5 100644 Binary files a/8-css-for-js/10-box-sizing/border-box@2x.png and b/8-css-for-js/10-box-sizing/border-box@2x.png differ diff --git a/figures.sketch b/figures.sketch index 62ee1a7d..8a53a83a 100644 Binary files a/figures.sketch and b/figures.sketch differ