diff --git a/.gitattributes b/.gitattributes
index 6313b56c57..d3877a5382 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -1 +1,2 @@
* text=auto eol=lf
+*.svg binary
diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml
new file mode 100644
index 0000000000..ca5355a93c
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/config.yml
@@ -0,0 +1,5 @@
+blank_issues_enabled: false
+contact_links:
+ - name: Наш Discord-сервер
+ url: https://discord.gg/X8yWNWpTQs
+ about: Вопросы по JavaScript, HTML, CSS, Node.js, React, TypeScript, Vue.js, Angular, а также «code review» и обсуждение программирования в целом
diff --git a/.github/ISSUE_TEMPLATE/tutorial_suggestion.yml b/.github/ISSUE_TEMPLATE/tutorial_suggestion.yml
new file mode 100644
index 0000000000..fc2e5cfa77
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/tutorial_suggestion.yml
@@ -0,0 +1,52 @@
+name: 📙 Предложить идею по улучшению материала учебника
+description: Предложения о добавлении новых разделов/статей в учебник; о переработке существующих статей; о добавлении новых материалов в статьи
+title: "[Предложение: учебник]: "
+labels: ["suggestion: tutorial"]
+body:
+ - type: markdown
+ attributes:
+ value: |
+ ## Не открывайте Issue в этой категории, если хотите предложить:
+ * Исправление/изменение кода в какой-либо из статей
+ * Исправление неточности/устаревшей информации в какой-либо из статей
+ * Исправление орфографических/пунктуационных/стилистических ошибок в какой-либо из статей
+ * Добавление задач в какую-либо из статей
+
+ ...А так же любые другие **небольшие** правки, которые, на ваш взгляд, не требуют обсуждения и могут быть сразу отправлены на рассмотрение.
+ * «[Как внести правки в учебник?](../blob/master/CONTRIBUTING.md#как-внести-правки-в-учебник)»
+ ## Открывайте Issue в этой категории, если хотите предложить:
+ * Переработку какой-либо статьи (или переработку определенной части статьи)
+ * Добавление новых разделов в учебник
+ * Добавление новых статей в учебник
+ * Добавление нового материала в какую-либо из статей
+ * ...а так же любые другие **крупные** правки
+
+ Перечисленные выше темы требуют предварительного обсуждения с редакторами учебника.
+ - type: textarea
+ id: suggestion-description
+ attributes:
+ label: Описание
+ description: Что именно вы хотите предложить?
+ placeholder: |
+ Например: «в JavaScript недавно был добавлен [...] — на мой взгляд, было бы неплохо сделать новую статью на эту тему».
+ validations:
+ required: true
+ - type: textarea
+ id: suggestion-motivation
+ attributes:
+ label: Мотивация
+ description: Почему предлагаемые правки действительно должны быть внесены в учебник?
+ placeholder: |
+ Например: «я считаю, что любое представление о [...] без понимания концепции [...] будет недостаточным и неполным, у читателя может сложиться ложное впечатление».
+ validations:
+ required: true
+ - type: dropdown
+ id: suggestion-question
+ attributes:
+ label: Готовы ли вы принять участие в реализации данного предложения?
+ description: Например, если вы предлагаете добавить новую статью — готовы ли вы заняться её написанием?
+ options:
+ - Да, я готов(а) принять участие.
+ - Нет, я не готов(а) принимать участие. Оставляю эту возможность редакторам учебника.
+ validations:
+ required: true
diff --git a/.github/ISSUE_TEMPLATE/website_suggestion.yml b/.github/ISSUE_TEMPLATE/website_suggestion.yml
new file mode 100644
index 0000000000..fb2f960925
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/website_suggestion.yml
@@ -0,0 +1,23 @@
+name: 🌐 Предложить идею по улучшению веб-сайта
+description: Предложения о добавлении нового функционала на сайт учебника; ошибки/опечатки во вкладках «Курсы», «Тесты знаний», «Скринкасты», «о проекте» и т.д; идеи по улучшению курсов
+title: "[Предложение: веб-сайт]: "
+labels: ["suggestion: website"]
+body:
+ - type: markdown
+ attributes:
+ value: |
+ Всё, что касается именно **веб-сайта**, на котором опубликован учебник — [https://learn.javascript.ru](https://learn.javascript.ru).
+
+ В этой категории вы можете:
+ * Предложить добавление нового функционала на веб-сайт учебника
+ * Сообщить об ошибках/опечатках во вкладках «Курсы», «Тесты знаний», «Скринкасты», «о проекте» и т.д.
+ * Предложить идеи по улучшению курсов
+ - type: textarea
+ id: suggestion-description
+ attributes:
+ label: Описание
+ description: Что именно вы хотите предложить (или о чём хотите сообщить)?
+ placeholder: |
+ Например: «мне кажется, было бы неплохо добавить возможность [...]».
+ validations:
+ required: true
diff --git a/.github/ISSUE_TEMPLATE/wquestion.yml b/.github/ISSUE_TEMPLATE/wquestion.yml
new file mode 100644
index 0000000000..c92886b37b
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/wquestion.yml
@@ -0,0 +1,20 @@
+name: 📨 Задать вопрос
+description: Вопросы по материалу учебника; по веб-сайту; по редактированию учебника
+title: "[Вопрос]: "
+labels: ["question"]
+body:
+ - type: markdown
+ attributes:
+ value: |
+ Любые вопросы по материалу учебника; по веб-сайту; по редактированию учебника и т.д.
+
+ ### **Мы не консультируем по вопросам о JavaScript здесь.** Для этих целей есть [Discord-сервер](https://discord.gg/X8yWNWpTQs).
+ - type: textarea
+ id: question-description
+ attributes:
+ label: Описание
+ description: О чём вы хотите спросить?
+ placeholder: |
+ Например: «почему раздел [...] идёт перед разделом [...], а не после него?».
+ validations:
+ required: true
diff --git a/.github/ISSUE_TEMPLATE/ybug_report.yml b/.github/ISSUE_TEMPLATE/ybug_report.yml
new file mode 100644
index 0000000000..d9846d42f6
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/ybug_report.yml
@@ -0,0 +1,36 @@
+name: 🛑 Сообщить о баге
+description: На сайте учебника что-то неправильно отображается; не работает; работает не так, как нужно
+title: "[Баг]: "
+labels: ["bug"]
+body:
+ - type: markdown
+ attributes:
+ value: |
+ **Пожалуйста, заполните форму ниже максимально точной информацией.** Правильное описание бага поможет нам намного быстрее решить проблему.
+ - type: textarea
+ id: bug-description
+ attributes:
+ label: Описание
+ description: В чём именно заключается баг?
+ placeholder: |
+ Например: «в статье [...] неправильно отображается [...]».
+ validations:
+ required: true
+ - type: textarea
+ id: bug-reproduce
+ attributes:
+ label: Как воспроизвести?
+ description: Что нужно сделать, чтобы воспроизвести этот баг?
+ placeholder: |
+ Например: «чтобы воспроизвести баг, нужно: (1) открыть страницу [...] (2) перейти в раздел [...] (3) нажать на [...]».
+ validations:
+ required: true
+ - type: textarea
+ id: bug-browsers
+ attributes:
+ label: Браузер
+ description: В каком браузере у вас воспроизводится этот баг? Какая версия этого браузера? (можно указать несколько, если тестировали не в одном браузере)
+ placeholder: |
+ Например: «у меня воспроизводится этот баг в Chrome 116.0.5845.98»
+ validations:
+ required: true
diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md
new file mode 100644
index 0000000000..5ad133a198
--- /dev/null
+++ b/.github/pull_request_template.md
@@ -0,0 +1,20 @@
+
+
+## Описание
+
+
+
+## Ссылки
+
+
+
+
+
+
+
+
+
+
+## Связанные Issue
+
+
diff --git a/1-js/01-getting-started/1-intro/article.md b/1-js/01-getting-started/1-intro/article.md
index 302299ef15..64ef99485d 100644
--- a/1-js/01-getting-started/1-intro/article.md
+++ b/1-js/01-getting-started/1-intro/article.md
@@ -8,80 +8,80 @@
Программы на этом языке называются *скриптами*. Они могут встраиваться в HTML и выполняться автоматически при загрузке веб-страницы.
-Скрипты распространяются и выполняются как простой текст. Им не нужна специальная подготовка или компиляция для запуска.
+Скрипты распространяются и выполняются, как простой текст. Им не нужна специальная подготовка или компиляция для запуска.
Это отличает JavaScript от другого языка - [Java](https://ru.wikipedia.org/wiki/Java).
```smart header="Почему JavaScript?"
-Когда JavaScript создавался, у него было другое имя - "LiveScript". Однако, Java была очень популярная в то время и было решено, что позиционирование языка как "младшего брата" Java будет полезно.
+Когда JavaScript создавался, у него было другое имя - "LiveScript". Однако, язык Java был очень популярен в то время, и было решено, что позиционирование JavaScript как "младшего брата" Java будет полезно.
-Со временем JavaScript стал полностью независимым языком со своей собственной спецификацией, называющейся [ECMAScript](http://ru.wikipedia.org/wiki/ECMAScript), и сейчас не имеет никакого отношения к Java.
+Со временем JavaScript стал полностью независимым языком со своей собственной спецификацией, называющейся [ECMAScript](https://ru.wikipedia.org/wiki/ECMAScript), и сейчас не имеет никакого отношения к Java.
```
-Сегодня JavaScript может выполнятся не только в браузере, но и на сервере или на любом другом устройстве, которое имеет специальную программу, называющуюся ["движком" JavaScript](https://ru.wikipedia.org/wiki/%D0%94%D0%B2%D0%B8%D0%B6%D0%BE%D0%BA_JavaScript).
+Сегодня JavaScript может выполняться не только в браузере, но и на сервере или на любом другом устройстве, которое имеет специальную программу, называющуюся ["движком" JavaScript](https://ru.wikipedia.org/wiki/%D0%94%D0%B2%D0%B8%D0%B6%D0%BE%D0%BA_JavaScript).
-У браузере есть собственный движок, который иногда называют "виртуальная машина JavaScript".
+У браузера есть собственный движок, который иногда называют "виртуальная машина JavaScript".
Разные движки имеют разные "кодовые имена". Например:
-- [V8](https://ru.wikipedia.org/wiki/V8_(%D0%B4%D0%B2%D0%B8%D0%B6%D0%BE%D0%BA_JavaScript)) -- в Chrome и Opera.
+- [V8](https://ru.wikipedia.org/wiki/V8_(%D0%B4%D0%B2%D0%B8%D0%B6%D0%BE%D0%BA_JavaScript)) -- в Chrome, Opera и Edge.
- [SpiderMonkey](https://ru.wikipedia.org/wiki/SpiderMonkey) -- в Firefox.
-- ...Ещё есть "Trident" и "Chakra" для разных версий IE, "ChakraCore" для Microsoft Edge, "Nitro" и "SquirrelFish" для Safari и т.д.
+- ...Ещё есть "Chakra" для IE, "JavaScriptCore", "Nitro" и "SquirrelFish" для Safari и т.д.
-Эти названия полезно знать, так как они часто используются в статьях для разработчиков. Мы тоже будем их использовать. Например, если "функциональность X поддерживается V8", тогда "Х", скорее всего, работает в Chrome и Opera.
+Эти названия полезно знать, так как они часто используются в статьях для разработчиков. Мы тоже будем их использовать. Например, если "функциональность X поддерживается V8", тогда "Х", скорее всего, работает в Chrome, Opera и Edge.
```smart header="Как работают движки?"
Движки сложны. Но основы понять легко.
-1. Движок (встроенный, если это браузер) читает ("парсит") сценарий.
-2. Затем он преобразует ("компилирует") сценарий в машинный язык.
-3. После этого машинный код запускается и весьма быстро работает.
+1. Движок (встроенный, если это браузер) читает ("парсит") текст скрипта.
+2. Затем он преобразует ("компилирует") скрипт в машинный язык.
+3. После этого машинный код запускается и работает достаточно быстро.
Движок применяет оптимизации на каждом этапе. Он даже просматривает скомпилированный скрипт во время его работы, анализируя проходящие через него данные, и применяет оптимизации к машинному коду, полагаясь на полученные знания. В результате скрипты работают очень быстро.
```
## Что может JavaScript в браузере?
-Современный JavaScript - это "безопасный" язык программирования. Он не предоставляет низкоуровневый доступ к памяти или процессору, потому что он изначально был создан для браузеров, не требующих этого.
+Современный JavaScript - это "безопасный" язык программирования. Он не предоставляет низкоуровневый доступ к памяти или процессору, потому что изначально был создан для браузеров, не требующих этого.
-Возможности JavaScript сильно зависят от окружения в котором он работает. Например, [Node.JS](https://ru.wikipedia.org/wiki/Node.js) поддерживает функции чтения/записи произвольных файлов, выполнения сетевых запросов, и т.д.
+Возможности JavaScript сильно зависят от окружения, в котором он работает. Например, [Node.js](https://ru.wikipedia.org/wiki/Node.js) поддерживает функции чтения/записи произвольных файлов, выполнения сетевых запросов и т.д.
В браузере для JavaScript доступно всё, что связано с манипулированием веб-страницами, взаимодействием с пользователем и веб-сервером.
Например, в браузере JavaScript может:
-- Добавлять новый HTML на страницу, изменять существующее содержимое, модифицировать стили.
+- Добавлять новый HTML-код на страницу, изменять существующее содержимое, модифицировать стили.
- Реагировать на действия пользователя, щелчки мыши, перемещения указателя, нажатия клавиш.
- Отправлять сетевые запросы на удалённые сервера, скачивать и загружать файлы (технологии [AJAX](https://ru.wikipedia.org/wiki/AJAX) и [COMET](https://ru.wikipedia.org/wiki/Comet_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5))).
- Получать и устанавливать куки, задавать вопросы посетителю, показывать сообщения.
- Запоминать данные на стороне клиента ("local storage").
-## Что НЕ может JavaScript в браузере?
+## Чего НЕ может JavaScript в браузере?
-Возможности JavaScript в браузере ограничены ради безопасности пользователя. Цель заключается в предотвращении доступа не добросовестной веб-страницы к частной информации или нанесению ущерба данным пользователя.
+Возможности JavaScript в браузере ограничены ради безопасности пользователя. Цель заключается в предотвращении доступа недобросовестной веб-страницы к личной информации или нанесения ущерба данным пользователя.
Примеры таких ограничений включают в себя:
-- JavaScript на веб-странице не может читать/записывать произвольные файлы на жестком диске, копировать их или запускать программы. Он не имеет прямого доступа к системным функциям ОС.
+- JavaScript на веб-странице не может читать/записывать произвольные файлы на жёстком диске, копировать их или запускать программы. Он не имеет прямого доступа к системным функциям ОС.
- Современные браузеры позволяют ему работать с файлами, но с ограниченным доступом и предоставляют его только если пользователь выполняет определённые действия, такие как "перетаскивание" файла в окно браузера или его выбор с помощью тега ``.
+ Современные браузеры позволяют ему работать с файлами, но с ограниченным доступом, и предоставляют его, только если пользователь выполняет определённые действия, такие как "перетаскивание" файла в окно браузера или его выбор с помощью тега ``.
Существуют способы взаимодействия с камерой/микрофоном и другими устройствами, но они требуют явного разрешения пользователя. Таким образом, страница с поддержкой JavaScript не может незаметно включить веб-камеру, наблюдать за происходящим и отправлять информацию в [ФСБ](https://ru.wikipedia.org/wiki/%D0%A4%D0%B5%D0%B4%D0%B5%D1%80%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%81%D0%BB%D1%83%D0%B6%D0%B1%D0%B0_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D0%B9%D1%81%D0%BA%D0%BE%D0%B9_%D0%A4%D0%B5%D0%B4%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B8).
-- Различные окна/вкладки не знают друг о друге. Иногда одно окно, используя JavaScript, открывает другое окно. Но даже в этом случае, JavaScript с одной страницы не имеет доступа к другой, если они пришли с разных сайтов (с другого домена, протокола или порта).
+- Различные окна/вкладки не знают друг о друге. Иногда одно окно, используя JavaScript, открывает другое окно. Но даже в этом случае JavaScript с одной страницы не имеет доступа к другой, если они пришли с разных сайтов (с другого домена, протокола или порта).
- Это называется "Политика одинакового источника" (Same Origin Policy). Чтобы обойти это ограничение, обе страницы должны быть на это согласны и содержать JavaScript-код, который специальным образом обменивается данными.
+ Это называется "Политика одинакового источника" (Same Origin Policy). Чтобы обойти это ограничение, обе страницы должны согласиться с этим и содержать JavaScript-код, который специальным образом обменивается данными.
- Это ограничение необходимо, опять же, для безопасности пользователя. Страница `http://anysite.com`, которую открыл пользователь, не должна иметь доступ к другой вкладке браузера с URL `http://gmail.com` и воровать информацию оттуда.
-- JavaScript может легко взаимодействовать с сервером, с которого пришла текущая страница. Но его способность получать данные с других сайтов/доменов ограничена. Хотя это возможно, требуется явное соглашение (выраженное в заголовках HTTP) с удалённой стороной. Опять же, это ограничение безопасности.
+ Это ограничение необходимо, опять же, для безопасности пользователя. Страница `https://anysite.com`, которую открыл пользователь, не должна иметь доступ к другой вкладке браузера с URL `https://gmail.com` и воровать информацию оттуда.
+- JavaScript может легко взаимодействовать с сервером, с которого пришла текущая страница. Но его способность получать данные с других сайтов/доменов ограничена. Хотя это возможно в принципе, для чего требуется явное согласие (выраженное в заголовках HTTP) с удалённой стороной. Опять же, это ограничение безопасности.
-
+
-Подобные ограничения не действуют, если JavaScript используется вне браузера, например — на сервере. Современные браузеры предоставляют плагины/расширения с помощью которых можно запрашивать дополнительные разрешения.
+Подобные ограничения не действуют, если JavaScript используется вне браузера, например — на сервере. Современные браузеры предоставляют плагины/расширения, с помощью которых можно запрашивать дополнительные разрешения.
## Что делает JavaScript особенным?
-Как минимум *три* сильные стороны JavaScript:
+Как минимум, *три* сильные стороны JavaScript:
```compare
+ Полная интеграция с HTML/CSS.
@@ -90,31 +90,32 @@
```
JavaScript - это единственная браузерная технология, сочетающая в себе все эти три вещи.
-Вот что делает JavaScript особенным. Вот почему это самый распространенный инструмент для создания интерфейсов в браузере.
-
-Планируя изучить новую технологию, полезно оценить её перспективы. Итак, давайте перейдём к современным тенденциям, включая новые языки и браузерные технологии.
+Вот что делает JavaScript особенным. Вот почему это самый распространённый инструмент для создания интерфейсов в браузере.
+Хотя, конечно, JavaScript позволяет делать приложения не только в браузерах, но и на сервере, на мобильных устройствах и т.п.
## Языки "над" JavaScript
-Синтаксис JavaScript подходит не под все нужны. Разные люди хотят иметь разные возможности.
+Синтаксис JavaScript подходит не под все нужды. Разные люди хотят иметь разные возможности.
Это естественно, потому что проекты разные и требования к ним тоже разные.
-Так, в последнее время, появилось много новых языков, которые *транспилируются* (конвертируются) в JavaScript прежде, чем запустятся в браузере.
+Так, в последнее время появилось много новых языков, которые *транспилируются* (конвертируются) в JavaScript, прежде чем запустятся в браузере.
Современные инструменты делают транспиляцию очень быстрой и прозрачной, фактически позволяя разработчикам писать код на другом языке, автоматически преобразуя его в JavaScript "под капотом".
Примеры таких языков:
-- [CoffeeScript](http://coffeescript.org/) добавляет "синтаксический сахар" для JavaScript. Он вводит более короткий синтаксис, которые позволяет писать чистый и лаконичный код. Обычно такое нравится Ruby-программистам.
-- [TypeScript](http://www.typescriptlang.org/) концентрируется на добавлении "строгой типизации" для упрощения разработки и поддержки больших и сложных систем. Разработан Microsoft.
-- [Dart](https://www.dartlang.org/) стоит особняком, потому что имеет собственный движок работающий вне браузера (например, в мобильных приложениях). Первоначально был предложен Google как замена JavaScript, но на данный момент, необходима его транспиляция для запуска, так же как для языков выше.
+- [CoffeeScript](https://coffeescript.org/) добавляет "синтаксический сахар" для JavaScript. Он вводит более короткий синтаксис, который позволяет писать чистый и лаконичный код. Обычно такое нравится Ruby-программистам.
+- [TypeScript](https://www.typescriptlang.org/) концентрируется на добавлении "строгой типизации" для упрощения разработки и поддержки больших и сложных систем. Разработан Microsoft.
+- [Flow](https://flow.org/) тоже добавляет типизацию, но иначе. Разработан Facebook.
+- [Dart](https://www.dartlang.org/) стоит особняком, потому что имеет собственный движок, работающий вне браузера (например, в мобильных приложениях). Первоначально был предложен Google, как замена JavaScript, но на данный момент необходима его транспиляция для запуска так же, как для вышеперечисленных языков.
+- [Brython](https://brython.info/) транспилирует Python в JavaScript, что позволяет писать приложения на чистом Python без JavaScript.
-Есть и другие. Но даже если мы используем один из этих языков, мы, безусловно, должны знать JavaScript, чтобы действительно понимать, что мы делаем.
+Есть и другие. Но даже если мы используем один из этих языков, мы должны знать JavaScript, чтобы действительно понимать, что мы делаем.
## Итого
- JavaScript изначально создавался только для браузера, но сейчас используется на многих других платформах.
-- Сегодня JavaScript занимает уникальную позицию в качестве самого распространенного языка для браузера обладающего полной интеграцией с HTML/CSS.
+- Сегодня JavaScript занимает уникальную позицию в качестве самого распространённого языка для браузера, обладающего полной интеграцией с HTML/CSS.
- Многие языки могут быть "транспилированы" в JavaScript для предоставления дополнительных функций. Рекомендуется хотя бы кратко рассмотреть их после освоения JavaScript.
diff --git a/1-js/01-getting-started/1-intro/limitations.png b/1-js/01-getting-started/1-intro/limitations.png
deleted file mode 100644
index 3ef6b1e087..0000000000
Binary files a/1-js/01-getting-started/1-intro/limitations.png and /dev/null differ
diff --git a/1-js/01-getting-started/1-intro/limitations.svg b/1-js/01-getting-started/1-intro/limitations.svg
new file mode 100644
index 0000000000..76ea43fd7a
--- /dev/null
+++ b/1-js/01-getting-started/1-intro/limitations.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/1-js/01-getting-started/1-intro/limitations@2x.png b/1-js/01-getting-started/1-intro/limitations@2x.png
deleted file mode 100644
index 7aa1c41ae4..0000000000
Binary files a/1-js/01-getting-started/1-intro/limitations@2x.png and /dev/null differ
diff --git a/1-js/01-getting-started/2-code-editors/article.md b/1-js/01-getting-started/2-code-editors/article.md
deleted file mode 100644
index d36561bc6f..0000000000
--- a/1-js/01-getting-started/2-code-editors/article.md
+++ /dev/null
@@ -1,57 +0,0 @@
-# Code editors
-
-A code editor is the place where programmers spend most of their time.
-
-There are two main types of code editors: IDEs and lightweight editors. Many people use one tool of each type.
-
-## IDE
-
-The term [IDE](https://en.wikipedia.org/wiki/Integrated_development_environment) (Integrated Development Environment) refers to a powerful editor with many features that usually operates on a "whole project." As the name suggests, it's not just an editor, but a full-scale "development environment."
-
-An IDE loads the project (which can be many files), allows navigation between files, provides autocompletion based on the whole project (not just the open file), and integrates with a version management system (like [git](https://git-scm.com/)), a testing environment, and other "project-level" stuff.
-
-If you haven't selected an IDE yet, consider the following options:
-
-- [WebStorm](http://www.jetbrains.com/webstorm/) for frontend development. The same company offers other editors for other languages (paid).
-- [Netbeans](http://netbeans.org/) (free).
-
-All of these IDEs are cross-platform.
-
-For Windows, there's also "Visual Studio", not to be confused with "Visual Studio Code." "Visual Studio" is a paid and mighty Windows-only editor, well-suited for the .NET platform. A free version of it is called [Visual Studio Community](https://www.visualstudio.com/vs/community/).
-
-Many IDEs are paid but have a trial period. Their cost is usually negligible compared to a qualified developer's salary, so just choose the best one for you.
-
-## Lightweight editors
-
-"Lightweight editors" are not as powerful as IDEs, but they're fast, elegant and simple.
-
-They are mainly used to open and edit a file instantly.
-
-The main difference between a "lightweight editor" and an "IDE" is that an IDE works on a project-level, so it loads much more data on start, analyzes the project structure if needed and so on. A lightweight editor is much faster if we need only one file.
-
-In practice, lightweight editors may have a lot of plugins including directory-level syntax analyzers and autocompleters, so there's no strict border between a lightweight editor and an IDE.
-
-The following options deserve your attention:
-
-- [Visual Studio Code](https://code.visualstudio.com/) (cross-platform, free) also has many IDE-like features.
-- [Atom](https://atom.io/) (cross-platform, free).
-- [Sublime Text](http://www.sublimetext.com) (cross-platform, shareware).
-- [Notepad++](https://notepad-plus-plus.org/) (Windows, free).
-- [Vim](http://www.vim.org/) and [Emacs](https://www.gnu.org/software/emacs/) are also cool if you know how to use them.
-
-## My favorites
-
-The personal preference of the author is to have both an IDE for projects and a lightweight editor for quick and easy file editing.
-
-I'm using:
-
-- As an IDE for JS -- [WebStorm](http://www.jetbrains.com/webstorm/) (I switch to one of the other JetBrains offerings when using other languages)
-- As a lightweight editor -- [Sublime Text](http://www.sublimetext.com) or [Atom](https://atom.io/).
-
-## Let's not argue
-
-The editors in the lists above are those that either I or my friends whom I consider good developers have been using for a long time and are happy with.
-
-There are other great editors in our big world. Please choose the one you like the most.
-
-The choice of an editor, like any other tool, is individual and depends on your projects, habits, and personal preferences.
diff --git a/1-js/01-getting-started/2-manuals-specifications/article.md b/1-js/01-getting-started/2-manuals-specifications/article.md
new file mode 100644
index 0000000000..df109cd933
--- /dev/null
+++ b/1-js/01-getting-started/2-manuals-specifications/article.md
@@ -0,0 +1,37 @@
+
+# Справочники и спецификации
+
+Эта книга является *учебником* и нацелена на то, чтобы помочь вам постепенно освоить язык. Но когда вы хорошо изучите основы, вам понадобятся дополнительные источники информации.
+
+## Спецификация
+
+[Спецификация ECMA-262](https://www.ecma-international.org/publications-and-standards/standards/ecma-262/) содержит самую глубокую, детальную и формализованную информацию о JavaScript. Она определяет сам язык.
+
+Вначале спецификация может показаться тяжеловатой для понимания из-за слишком формального стиля изложения. Если вы ищете источник самой достоверной информации, то это правильное место, но она не для ежедневного использования.
+
+Новая версия спецификации появляется каждый год. А пока она не вышла официально, все желающие могут ознакомиться с текущим черновиком на .
+
+Чтобы почитать о самых последних возможностях, включая те, которые "почти в стандарте" (так называемые "stage 3 proposals"), посетите .
+
+Если вы разрабатываете под браузеры, то существуют и другие спецификации, о которых рассказывается во [второй части](info:browser-environment) этого учебника.
+
+## Справочники
+
+- **MDN (Mozilla) JavaScript Reference** -- это справочник с примерами и другой информацией. Хороший источник для получения подробных сведений о функциях языка, методах встроенных объектов и так далее.
+
+ Располагается по адресу .
+
+ Хотя зачастую вместо их сайта удобнее использовать какой-нибудь интернет-поисковик, вводя там запрос "MDN [что вы хотите найти]", например для поиска информации о функции `parseInt`.
+
+## Таблицы совместимости
+
+JavaScript -- это развивающийся язык, в который постоянно добавляется что-то новое.
+
+Посмотреть, какие возможности поддерживаются в разных браузерах и других движках, можно в следующих источниках:
+
+- - таблицы с информацией о поддержке по каждой возможности языка. Например, чтобы узнать, какие движки поддерживают современные криптографические функции, посетите: .
+- - таблица с возможностями языка и движками, которые их поддерживают и не поддерживают.
+
+Все эти ресурсы полезны в ежедневной работе программиста, так как они содержат ценную информацию о возможностях использования языка, их поддержке и так далее.
+
+Пожалуйста, запомните эти ссылки (или ссылку на эту страницу) на случай, когда вам понадобится подробная информация о какой-нибудь конкретной возможности JavaScript.
diff --git a/1-js/01-getting-started/3-code-editors/article.md b/1-js/01-getting-started/3-code-editors/article.md
new file mode 100644
index 0000000000..c2078d5efa
--- /dev/null
+++ b/1-js/01-getting-started/3-code-editors/article.md
@@ -0,0 +1,44 @@
+# Редакторы кода
+
+Большую часть своего рабочего времени программисты проводят в редакторах кода.
+
+Есть два основных типа редакторов: IDE и "лёгкие" редакторы. Многие используют по одному инструменту каждого типа.
+
+## IDE
+
+Термином [IDE](https://ru.wikipedia.org/wiki/Integrated_development_environment) (Integrated Development Environment, "интегрированная среда разработки") называют мощные редакторы с множеством функций, которые работают в рамках целого проекта. Как видно из названия, это не просто редактор, а нечто большее.
+
+IDE загружает проект (который может состоять из множества файлов), позволяет переключаться между файлами, предлагает автодополнение по коду всего проекта (а не только открытого файла), также она интегрирована с системой контроля версий (например, такой как [git](https://git-scm.com/)), средой для тестирования и другими инструментами на уровне всего проекта.
+
+Если вы ещё не выбрали себе IDE, присмотритесь к этим:
+
+- [Visual Studio Code](https://code.visualstudio.com/) (кросс-платформенная, бесплатная).
+- [WebStorm](https://www.jetbrains.com/webstorm/) (кросс-платформенная, бесплатная для некоммерческого использования).
+
+Для Windows есть ещё Visual Studio (не путать с Visual Studio Code). Visual Studio - это платная мощная среда разработки, которая работает только на Windows. Она хорошо подходит для .NET платформы. У неё есть бесплатная версия, которая называется [Visual Studio Community](https://www.visualstudio.com/vs/community/).
+
+Многие IDE платные, но у них есть пробный период. Их цена обычно незначительна по сравнению с зарплатой квалифицированного разработчика, так что пробуйте и выбирайте ту, что вам подходит лучше других.
+
+## "Лёгкие" редакторы
+
+"Лёгкие" редакторы менее мощные, чем IDE, но они отличаются скоростью, удобным интерфейсом и простотой.
+
+В основном их используют для того, чтобы быстро открыть и отредактировать нужный файл.
+
+Главное отличие между "лёгким" редактором и IDE состоит в том, что IDE работает на уровне целого проекта, поэтому она загружает больше данных при запуске, анализирует структуру проекта, если это необходимо, и так далее. Если вы работаете только с одним файлом, то гораздо быстрее открыть его в "лёгком" редакторе.
+
+На практике "лёгкие" редакторы могут иметь множество плагинов, включая автодополнение и анализаторы синтаксиса на уровне директории, поэтому границы между IDE и "лёгкими" редакторами размыты.
+
+Следующие варианты заслуживают вашего внимания:
+
+- [Sublime Text](https://www.sublimetext.com) (кроссплатформенный, условно-бесплатный).
+- [Notepad++](https://notepad-plus-plus.org/) (Windows, бесплатный).
+- [Vim](https://www.vim.org/) и [Emacs](https://www.gnu.org/software/emacs/) тоже хороши, если знать, как ими пользоваться.
+
+## Не будем ссориться
+
+Редакторы, перечисленные выше, известны автору давно и заслужили много хороших отзывов от коллег.
+
+Конечно же, есть много других отличных редакторов. Выбирайте тот, который вам больше нравится.
+
+Выбор редактора, как и любого другого инструмента, индивидуален и зависит от ваших проектов, привычек и личных предпочтений.
diff --git a/1-js/01-getting-started/3-devtools/article.md b/1-js/01-getting-started/3-devtools/article.md
deleted file mode 100644
index 5ce9387e8a..0000000000
--- a/1-js/01-getting-started/3-devtools/article.md
+++ /dev/null
@@ -1,64 +0,0 @@
-# Консоль разработчика
-
-Код уязвим для ошибок. И вы, скорее всего, будете делать ошибки в коде... Впрочем, давайте будем откровенны: вы *точно* будете совершать ошибки в коде. В конце концов, вы человек, а не [робот](https://ru.wikipedia.org/wiki/%D0%91%D0%B5%D0%BD%D0%B4%D0%B5%D1%80_(%D0%A4%D1%83%D1%82%D1%83%D1%80%D0%B0%D0%BC%D0%B0)).
-
-Но по умолчанию в браузере ошибки не видны. То есть, если что-то пойдет не так, мы не увидим, что именно сломалось и не сможем это починить.
-
-Для решения задач такого рода в браузер встроены так называемые "Инструменты разработки" (Developer tools, или сокращенно — devtools).
-
-Chrome и Firefox снискали любовь подавляющего большинства программистов во многом благодаря своим отменным инструментам разработчика. Остальные браузеры хоть и оснащены подобными инструментами, но все же зачастую находятся в роли догоняющих и по качеству и по количеству свойств и особенностей. В общем, почти у всех программистов есть свой "любимый" браузер. Другие используются только для отлова и исправления специфичных "браузерозависимых" багов.
-
-Для начала знакомства с этими мощными инструментами давайте выясним, как их открывать, смотреть ошибки и запускать команды JavaScript.
-
-## Google Chrome
-
-Откройте страницу [bug.html](bug.html).
-
-В ее JavaScript код закралась ошибка. Она не видна обычному посетителю, поэтому давайте найдем ее при помощи devtools.
-
-Нажмите `key:F12` или, если вы используете Mac, `key:Cmd+Opt+J`.
-
-По умолчанию в инструментах разработчика откроется вкладка Console (консоль).
-
-Она выглядит приблизительно следующим образом:
-
-
-
-Точный внешний вид инструментов разработки зависит от используемой версии Chrome. Время от времени некоторые детали изменяются, но в целом внешний вид остается примерно похожим на предыдущие версии.
-
-- В консоли мы можем увидеть сообщение об ошибке, отрисованное красным цветом. В нашем случае скрипт содержит неизвестную команду "lalala".
-- Справа присутствует кликабельная ссылка на исходный код `bug.html:12` с номером строки кода, в которой эта ошибка и произошла.
-
-Под сообщением об ошибке находится синий символ `>`. Он обозначает командную строку, в ней мы можем редактировать и запускать JavaScript-команды. Для их запуска нажмите `key:Enter` (для переноса строки жмите `key:Shift+Enter`).
-
-Теперь мы явно видим ошибки, для начала этого вполне достаточно. Мы еще вернемся к инструментам разработчика позже и более подробно рассмотрим отладку кода в главе .
-
-
-## Firefox, Edge и другие
-
-Инструменты разработчика в большинстве браузеров привязаны к кнопке `key:F12`.
-
-Их внешний вид и принципы работы мало чем отличаются. Разобравшись с инструментами в одном браузере вы без труда сможете работать с ними и в другом.
-
-## Safari
-
-Safari (браузер для Mac, не поддерживается в системах Windows/Linux) все же имеет небольшое отличие. Для начала работы нам нужно включить "Меню разработки" ("Developer menu").
-
-Откройте настройки (Preferences) и перейдите к панели "Продвинутые" (Advanced). В самом низу вы найдете чекбокс:
-
-
-
-Теперь консоль можно активировать нажатием клавиш `key:Cmd+Opt+C`. Также обратите внимание на новый элемент меню "Разработка" ("Develop"). В нем содержится большое количество команд и настроек.
-
-## Многострочный ввод
-
-Обычно, при нажатии `key:Enter` введенная строка кода сразу выполняется.
-
-Чтобы перенести строку нажмите `key:Shift+Enter`.
-
-## Итого
-
-- Инструменты разработчика позволяют нам смотреть ошибки, выполнять команды, проверять значение переменных и еще много всего полезного.
-- В большинстве браузеров, работающих под Windows, инструменты разработчика можно открыть, нажав `key:F12`. В Chrome для Mac используйте комбинацию `key:Cmd+Opt+J`, Safari: `key:Cmd+Opt+C` (необходимо предварительное включение "меню разработчика").
-
-Теперь наше окружение полностью настроено. В следующем разделе мы перейдем непосредственно к JavaScript.
\ No newline at end of file
diff --git a/1-js/01-getting-started/3-devtools/bug.html b/1-js/01-getting-started/3-devtools/bug.html
deleted file mode 100644
index edb02375ca..0000000000
--- a/1-js/01-getting-started/3-devtools/bug.html
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-
-
-
-
-
-
-
- There is an error in the script on this page.
-
-
-
-
-
\ No newline at end of file
diff --git a/1-js/01-getting-started/3-devtools/chrome.png b/1-js/01-getting-started/3-devtools/chrome.png
deleted file mode 100644
index 4cb3ea2f46..0000000000
Binary files a/1-js/01-getting-started/3-devtools/chrome.png and /dev/null differ
diff --git a/1-js/01-getting-started/3-devtools/chrome@2x.png b/1-js/01-getting-started/3-devtools/chrome@2x.png
deleted file mode 100644
index b87404a8f4..0000000000
Binary files a/1-js/01-getting-started/3-devtools/chrome@2x.png and /dev/null differ
diff --git a/1-js/01-getting-started/3-devtools/safari.png b/1-js/01-getting-started/3-devtools/safari.png
deleted file mode 100644
index 37598a2610..0000000000
Binary files a/1-js/01-getting-started/3-devtools/safari.png and /dev/null differ
diff --git a/1-js/01-getting-started/3-devtools/safari@2x.png b/1-js/01-getting-started/3-devtools/safari@2x.png
deleted file mode 100644
index c59cebef21..0000000000
Binary files a/1-js/01-getting-started/3-devtools/safari@2x.png and /dev/null differ
diff --git a/1-js/01-getting-started/4-devtools/article.md b/1-js/01-getting-started/4-devtools/article.md
new file mode 100644
index 0000000000..1d52219ffc
--- /dev/null
+++ b/1-js/01-getting-started/4-devtools/article.md
@@ -0,0 +1,64 @@
+# Консоль разработчика
+
+Код уязвим для ошибок. И вы, скорее всего, будете делать ошибки в коде... Впрочем, давайте будем откровенны: вы *точно* будете совершать ошибки в коде. В конце концов, вы человек, а не [робот](https://ru.wikipedia.org/wiki/%D0%91%D0%B5%D0%BD%D0%B4%D0%B5%D1%80_(%D0%A4%D1%83%D1%82%D1%83%D1%80%D0%B0%D0%BC%D0%B0)).
+
+Но по умолчанию в браузере ошибки не видны. То есть, если что-то пойдёт не так, мы не увидим, что именно сломалось, и не сможем это починить.
+
+Для решения задач такого рода в браузер встроены так называемые "Инструменты разработки" (Developer tools или сокращённо — devtools).
+
+Chrome и Firefox снискали любовь подавляющего большинства программистов во многом благодаря своим отменным инструментам разработчика. Остальные браузеры, хотя и оснащены подобными инструментами, но всё же зачастую находятся в роли догоняющих и по качеству, и по количеству свойств и особенностей. В общем, почти у всех программистов есть свой "любимый" браузер. Другие используются только для отлова и исправления специфичных "браузерозависимых" ошибок.
+
+Для начала знакомства с этими мощными инструментами давайте выясним, как их открывать, смотреть ошибки и запускать команды JavaScript.
+
+## Google Chrome
+
+Откройте страницу [bug.html](bug.html).
+
+В её JavaScript-коде закралась ошибка. Она не видна обычному посетителю, поэтому давайте найдём её при помощи инструментов разработки.
+
+Нажмите `key:F12` или, если вы используете Mac, `key:Cmd+Opt+J`.
+
+По умолчанию в инструментах разработчика откроется вкладка Console (консоль).
+
+Она выглядит приблизительно следующим образом:
+
+
+
+Точный внешний вид инструментов разработки зависит от используемой версии Chrome. Время от времени некоторые детали изменяются, но в целом внешний вид остаётся примерно похожим на предыдущие версии.
+
+- В консоли мы можем увидеть сообщение об ошибке, отрисованное красным цветом. В нашем случае скрипт содержит неизвестную команду "lalala".
+- Справа присутствует ссылка на исходный код `bug.html:12` с номером строки кода, в которой эта ошибка и произошла.
+
+Под сообщением об ошибке находится синий символ `>`. Он обозначает командную строку, в ней мы можем редактировать и запускать JavaScript-команды. Для их запуска нажмите `key:Enter`.
+
+```smart header="Многострочный ввод"
+Обычно при нажатии `key:Enter` введённая строка кода сразу выполняется.
+
+Чтобы перенести строку, нажмите `key:Shift+Enter`. Так можно вводить более длинный JS-код.
+```
+
+Теперь мы явно видим ошибки, для начала этого вполне достаточно. Мы ещё вернёмся к инструментам разработчика позже и более подробно рассмотрим отладку кода в главе .
+
+
+## Firefox, Edge и другие
+
+Инструменты разработчика в большинстве браузеров открываются при нажатии на `key:F12`.
+
+Их внешний вид и принципы работы мало чем отличаются. Разобравшись с инструментами в одном браузере, вы без труда сможете работать с ними и в другом.
+
+## Safari
+
+Safari (браузер для Mac, не поддерживается в системах Windows/Linux) всё же имеет небольшое отличие. Для начала работы нам нужно включить "Меню разработки" ("Developer menu").
+
+Откройте Настройки (Preferences) и перейдите к панели "Продвинутые" (Advanced). В самом низу вы найдёте чекбокс:
+
+
+
+Теперь консоль можно активировать нажатием клавиш `key:Cmd+Opt+C`. Также обратите внимание на новый элемент меню "Разработка" ("Develop"). В нем содержится большое количество команд и настроек.
+
+## Итого
+
+- Инструменты разработчика позволяют нам смотреть ошибки, выполнять команды, проверять значение переменных и ещё много всего полезного.
+- В большинстве браузеров, работающих под Windows, инструменты разработчика можно открыть, нажав `key:F12`. В Chrome для Mac используйте комбинацию `key:Cmd+Opt+J`, Safari: `key:Cmd+Opt+C` (необходимо предварительное включение "Меню разработчика").
+
+Теперь наше окружение полностью настроено. В следующем разделе мы перейдём непосредственно к JavaScript.
diff --git a/1-js/01-getting-started/4-devtools/bug.html b/1-js/01-getting-started/4-devtools/bug.html
new file mode 100644
index 0000000000..6e25cf9cd8
--- /dev/null
+++ b/1-js/01-getting-started/4-devtools/bug.html
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+ На этой странице есть ошибка в скрипте.
+
+
+
+
+
\ No newline at end of file
diff --git a/1-js/01-getting-started/4-devtools/chrome.webp b/1-js/01-getting-started/4-devtools/chrome.webp
new file mode 100644
index 0000000000..bdf067079e
Binary files /dev/null and b/1-js/01-getting-started/4-devtools/chrome.webp differ
diff --git a/1-js/01-getting-started/4-devtools/safari.png b/1-js/01-getting-started/4-devtools/safari.png
new file mode 100644
index 0000000000..4538827eb0
Binary files /dev/null and b/1-js/01-getting-started/4-devtools/safari.png differ
diff --git a/1-js/02-first-steps/01-hello-world/1-hello-alert/solution.view/index.html b/1-js/02-first-steps/01-hello-world/1-hello-alert/solution.view/index.html
index 45e6744b3a..16a2d2ce1b 100644
--- a/1-js/02-first-steps/01-hello-world/1-hello-alert/solution.view/index.html
+++ b/1-js/02-first-steps/01-hello-world/1-hello-alert/solution.view/index.html
@@ -1,12 +1,10 @@
-
-
-
\ No newline at end of file
+