diff --git a/1-js/2-first-steps/2-external-script/article.md b/1-js/2-first-steps/2-external-script/article.md
index 9a3567ed..ea91445e 100644
--- a/1-js/2-first-steps/2-external-script/article.md
+++ b/1-js/2-first-steps/2-external-script/article.md
@@ -165,12 +165,18 @@
При запуске вы увидите, что вся страница отобразилась тут же, а `alert` из внешнего скрипта появится позже, когда загрузится скрипт.
-**Большинство современных системы рекламы и счётчиков знают про эти атрибуты и используют их.**
+[smart header="Эти атрибуты давно \"в ходу\""]
+Большинство современных системы рекламы и счётчиков знают про эти атрибуты и используют их.
+
+Перед вставкой внешнего тега ``
+
Специальные атрибуты `async` и `defer` используются для того, чтобы пока грузится внешний скрипт -- браузер показал остальную (следующую за ним) часть страницы. Без них этого не происходит.
+
Разница между `async` и `defer`: атрибут `defer` сохраняет относительную последовательность скриптов, а `async` -- нет.
Очень важно не только читать учебник, но делать что-то самостоятельно.
diff --git a/1-js/4-data-structures/7-array/array-pop.svg b/1-js/4-data-structures/7-array/array-pop.svg
index 6f976692..bc0a864c 100644
--- a/1-js/4-data-structures/7-array/array-pop.svg
+++ b/1-js/4-data-structures/7-array/array-pop.svg
@@ -6,19 +6,19 @@
-
-
+
+ 01
-
+ 2
-
+ 3
@@ -41,15 +41,15 @@
очистить
-
-
+
+ 01
-
+ 2
diff --git a/1-js/4-data-structures/7-array/array-shift.svg b/1-js/4-data-structures/7-array/array-shift.svg
index ee1cf8d4..a8584338 100644
--- a/1-js/4-data-structures/7-array/array-shift.svg
+++ b/1-js/4-data-structures/7-array/array-shift.svg
@@ -9,11 +9,11 @@
1
-
+ 2
-
+ 3
@@ -29,19 +29,19 @@
length = 4
-
-
+
+ 01
-
+ 2
-
+ 3
@@ -67,8 +67,8 @@
элементывлево
-
-
+
+ 0
@@ -76,15 +76,15 @@
"Яблоко"
-
-
+
+ 01
-
+ 2
diff --git a/1-js/4-data-structures/7-array/array-speed.svg b/1-js/4-data-structures/7-array/array-speed.svg
index c4e300aa..227243c6 100644
--- a/1-js/4-data-structures/7-array/array-speed.svg
+++ b/1-js/4-data-structures/7-array/array-speed.svg
@@ -6,39 +6,39 @@
-
-
+
+ 01
-
+ 2
-
+ 3
-
+ pop
-
+ unshift
-
+ push
-
+ shift
diff --git a/1-js/4-data-structures/8-array-methods/9-output-single-linked-list/linked-list.svg b/1-js/4-data-structures/8-array-methods/9-output-single-linked-list/linked-list.svg
index 0df9bcdf..f9f34c9a 100644
--- a/1-js/4-data-structures/8-array-methods/9-output-single-linked-list/linked-list.svg
+++ b/1-js/4-data-structures/8-array-methods/9-output-single-linked-list/linked-list.svg
@@ -6,7 +6,7 @@
-
+ value
@@ -18,7 +18,7 @@
next
-
+ value
@@ -30,7 +30,7 @@
next
-
+ value
@@ -42,7 +42,7 @@
next
-
+ value
diff --git a/1-js/4-data-structures/9-array-iteration/reduce.svg b/1-js/4-data-structures/9-array-iteration/reduce.svg
index 7cb12bc8..4df74524 100644
--- a/1-js/4-data-structures/9-array-iteration/reduce.svg
+++ b/1-js/4-data-structures/9-array-iteration/reduce.svg
@@ -6,7 +6,7 @@
-
+ 1
@@ -16,7 +16,7 @@
current1
-
+ 2
@@ -26,7 +26,7 @@
current2
-
+ 3
@@ -36,7 +36,7 @@
current3
-
+ 4
@@ -46,7 +46,7 @@
current4
-
+ 5
diff --git a/1-js/5-functions-closures/6-memory-management/family-no-family.svg b/1-js/5-functions-closures/6-memory-management/family-no-family.svg
index e1d51b9e..13e087e2 100644
--- a/1-js/5-functions-closures/6-memory-management/family-no-family.svg
+++ b/1-js/5-functions-closures/6-memory-management/family-no-family.svg
@@ -8,7 +8,7 @@
-
+ window
diff --git a/1-js/5-functions-closures/6-memory-management/family-no-father-2.svg b/1-js/5-functions-closures/6-memory-management/family-no-father-2.svg
index 66eac6ef..a6252c0f 100644
--- a/1-js/5-functions-closures/6-memory-management/family-no-father-2.svg
+++ b/1-js/5-functions-closures/6-memory-management/family-no-father-2.svg
@@ -6,7 +6,7 @@
-
+ window
diff --git a/1-js/5-functions-closures/6-memory-management/family-no-father.svg b/1-js/5-functions-closures/6-memory-management/family-no-father.svg
index 837095ec..5a39c3a8 100644
--- a/1-js/5-functions-closures/6-memory-management/family-no-father.svg
+++ b/1-js/5-functions-closures/6-memory-management/family-no-father.svg
@@ -6,7 +6,7 @@
-
+ window
diff --git a/1-js/5-functions-closures/6-memory-management/family.svg b/1-js/5-functions-closures/6-memory-management/family.svg
index 3cfc4826..4a20f22a 100644
--- a/1-js/5-functions-closures/6-memory-management/family.svg
+++ b/1-js/5-functions-closures/6-memory-management/family.svg
@@ -8,7 +8,7 @@
-
+ window
diff --git a/1-js/9-prototypes/1-prototype/proto-animal-rabbit.svg b/1-js/9-prototypes/1-prototype/proto-animal-rabbit.svg
index ffa9ebfd..9c368811 100644
--- a/1-js/9-prototypes/1-prototype/proto-animal-rabbit.svg
+++ b/1-js/9-prototypes/1-prototype/proto-animal-rabbit.svg
@@ -6,14 +6,14 @@
-
+ eats: trueanimal
-
+ jumps: true
diff --git a/1-js/9-prototypes/3-native-prototypes/native-prototypes-array-tostring.svg b/1-js/9-prototypes/3-native-prototypes/native-prototypes-array-tostring.svg
index dd508be6..e3dbff29 100644
--- a/1-js/9-prototypes/3-native-prototypes/native-prototypes-array-tostring.svg
+++ b/1-js/9-prototypes/3-native-prototypes/native-prototypes-array-tostring.svg
@@ -6,7 +6,7 @@
-
+ toString: function...
@@ -14,7 +14,7 @@
Array.prototype
-
+ toString: function...
@@ -22,7 +22,7 @@
Object.prototype
-
+
diff --git a/1-js/9-prototypes/3-native-prototypes/native-prototypes-classes.svg b/1-js/9-prototypes/3-native-prototypes/native-prototypes-classes.svg
index d2a97150..9d40129b 100644
--- a/1-js/9-prototypes/3-native-prototypes/native-prototypes-classes.svg
+++ b/1-js/9-prototypes/3-native-prototypes/native-prototypes-classes.svg
@@ -6,7 +6,7 @@
-
+ toString: functionдругие методы объектов
@@ -24,7 +24,7 @@
null
-
+ slice: functionдругие методы массивов
@@ -35,7 +35,7 @@
Array.prototype
-
+ __proto__
@@ -46,7 +46,7 @@
Function.prototype
-
+ toFixed: functionдругие методы чисел
@@ -61,17 +61,17 @@
-
+ [1, 2, 3]
-
+ function f(args) { ...}
-
+ 5
diff --git a/1-js/9-prototypes/3-native-prototypes/native-prototypes-object.svg b/1-js/9-prototypes/3-native-prototypes/native-prototypes-object.svg
index 2cab5839..f7fb8153 100644
--- a/1-js/9-prototypes/3-native-prototypes/native-prototypes-object.svg
+++ b/1-js/9-prototypes/3-native-prototypes/native-prototypes-object.svg
@@ -6,7 +6,7 @@
-
+ toString: functionдругие методы объектов
@@ -14,7 +14,7 @@
Object.prototype
-
+ obj
diff --git a/1-js/9-prototypes/5-class-inheritance/class-inheritance-array-object.svg b/1-js/9-prototypes/5-class-inheritance/class-inheritance-array-object.svg
index 4ceb549c..3b4b5230 100644
--- a/1-js/9-prototypes/5-class-inheritance/class-inheritance-array-object.svg
+++ b/1-js/9-prototypes/5-class-inheritance/class-inheritance-array-object.svg
@@ -6,7 +6,7 @@
-
+ slice: function...
@@ -17,7 +17,7 @@
arr
-
+ hasOwnProperty: function...
@@ -25,7 +25,7 @@
Object.prototype
-
+
diff --git a/1-js/9-prototypes/5-class-inheritance/class-inheritance-rabbit-animal.svg b/1-js/9-prototypes/5-class-inheritance/class-inheritance-rabbit-animal.svg
index f7b19ce7..a7264911 100644
--- a/1-js/9-prototypes/5-class-inheritance/class-inheritance-rabbit-animal.svg
+++ b/1-js/9-prototypes/5-class-inheritance/class-inheritance-rabbit-animal.svg
@@ -6,7 +6,7 @@
-
+ jump: function
@@ -16,7 +16,7 @@
rabbit
-
+ run: functionstop: function
@@ -24,7 +24,7 @@
Animal.prototype
-
+
diff --git a/1-js/9-prototypes/5-class-inheritance/class-inheritance-rabbit-run-animal.svg b/1-js/9-prototypes/5-class-inheritance/class-inheritance-rabbit-run-animal.svg
index ed73c590..a40ab833 100644
--- a/1-js/9-prototypes/5-class-inheritance/class-inheritance-rabbit-run-animal.svg
+++ b/1-js/9-prototypes/5-class-inheritance/class-inheritance-rabbit-run-animal.svg
@@ -6,7 +6,7 @@
-
+ jump: function
@@ -18,7 +18,7 @@
rabbit
-
+ run: functionstop: function
@@ -26,7 +26,7 @@
Animal.prototype
-
+
diff --git a/11-regular-expressions-javascript/12-regexp-alternation/1-find-programming-language/solution.md b/11-regular-expressions-javascript/12-regexp-alternation/1-find-programming-language/solution.md
index b02bec16..483f818e 100644
--- a/11-regular-expressions-javascript/12-regexp-alternation/1-find-programming-language/solution.md
+++ b/11-regular-expressions-javascript/12-regexp-alternation/1-find-programming-language/solution.md
@@ -15,7 +15,7 @@ alert( str.match(reg) ); // Java,Java,PHP,C,C
Естественно, при этом JavaScript не будет найдено никогда.
-То же самое -- с C и C++.
+То же самое -- с языками C и C++.
Есть два решения проблемы:
diff --git a/11-regular-expressions-javascript/12-regexp-alternation/2-match-quoted-string/solution.md b/11-regular-expressions-javascript/12-regexp-alternation/2-match-quoted-string/solution.md
index 5ff6e4fd..c959b6fa 100644
--- a/11-regular-expressions-javascript/12-regexp-alternation/2-match-quoted-string/solution.md
+++ b/11-regular-expressions-javascript/12-regexp-alternation/2-match-quoted-string/solution.md
@@ -13,7 +13,7 @@
```js
//+ run
var re = /"(\\.|[^"\\])*"/g;
-var str = '.. "test me" .. "Скажи \\"Привет\\"!" .. "\\r\\n" ..';
+var str = '.. "test me" .. "Скажи \\"Привет\\"!" .. "\\r\\n\\\\" ..';
-alert( str.match(re) ); // "test me","Скажи \"Привет\"!","\r\n"
+alert( str.match(re) ); // "test me","Скажи \"Привет\"!","\r\n\\"
```
\ No newline at end of file
diff --git a/11-regular-expressions-javascript/12-regexp-alternation/2-match-quoted-string/task.md b/11-regular-expressions-javascript/12-regexp-alternation/2-match-quoted-string/task.md
index 33c4a94e..4db27891 100644
--- a/11-regular-expressions-javascript/12-regexp-alternation/2-match-quoted-string/task.md
+++ b/11-regular-expressions-javascript/12-regexp-alternation/2-match-quoted-string/task.md
@@ -1,27 +1,26 @@
# Найдите строки в кавычках
-Найдите при помощи регэкспа строки в двойных кавычках "...".
+Найдите в тексте при помощи регэкспа строки в двойных кавычках "...".
-В строке *могут* быть любые символы, включая вложенные кавычки, заэкранированные слэшем, то есть: \", \n. Слэш удваивается, чтобы вставить его как символ: \\.
+В строке поддерживается экранирование при помощи слеша -- примерно в таком же виде, как в обычных строках JavaScript. То есть, строка может содержать любые символы, экранированные слэшем, в частности: \", \n, и даже сам слэш в экранированном виде: \\.
-Иначе говоря, синтаксис строки -- примерно соответствует используемому в JavaScript. Нужно такие строки найти.
+Здесь особо важно, что двойная кавычка после слэша не оканчивает строку, а считается её частью. В этом и состоит основная сложность задачи, которая без этого условия была бы элементарной.
Пример совпадающих строк:
```js
-var str = ' .. *!*"test me"*/!* .. ';
-
-var str = ' .. *!*"Скажи \\"Привет\\"!"*/!* ... ';
-
-var str = ' .. *!*"\\r\\n"*/!* .. ';
+.. *!*"test me"*/!* .. (обычная строка)
+.. *!*"Скажи \"Привет\"!"*/!* ... (строка с кавычками внутри)
+.. *!*"\r\n\\"*/!* .. (строка со спец. символами и слэшем внутри)
```
-Слэши в этих строках удвоены по технической причине -- в JavaScript кавычки `'...'` считают слэш специальным символом и требуют его экранировать.
+Заметим, что в JavaScript такие строки удобнее всего задавать в одинарных кавычках, и слеши придётся удвоить (в одинарных кавычках они являются экранирующими символами):
-Так что на самом деле, к примеру, в такой строке одинарные слэши:
+Пример задания тестовой строки в JavaScript:
```js
//+ run
-var str = ' .. *!*"Скажи \\"Привет\\"!"*/!* ... ';
+var str = ' .. "test me" .. "Скажи \\"Привет\\"!" .. "\\r\\n\\\\" .. ';
-alert(str); // .. "Скажи \"Привет\" ...
+// эта строка будет такой:
+alert(str); // .. "test me" .. "Скажи \"Привет\"!" .. "\r\n\\" ..
```
diff --git a/11-regular-expressions-javascript/13-regexp-ahchors/1-start-end/solution.md b/11-regular-expressions-javascript/13-regexp-ahchors/1-start-end/solution.md
new file mode 100644
index 00000000..e5118b47
--- /dev/null
+++ b/11-regular-expressions-javascript/13-regexp-ahchors/1-start-end/solution.md
@@ -0,0 +1,6 @@
+
+Нам нужна строка, которая начинается -- и тут же кончается. То есть, пустая.
+
+Или, если быть ближе к механике регэкспов, то движок сначала будет искать в тексте начальную позицию ``pattern`^`, а как только найдёт её -- будет ожидать конечной ``pattern`$`.
+
+Заметим, что и ``pattern`^` и ``pattern`$` не требуют наличия символов. Это -- проверки. В пустой строке движок сначала проверит первую, а потом -- вторую -- и зафиксирует совпадение.
\ No newline at end of file
diff --git a/11-regular-expressions-javascript/13-regexp-ahchors/1-start-end/task.md b/11-regular-expressions-javascript/13-regexp-ahchors/1-start-end/task.md
new file mode 100644
index 00000000..f5df587e
--- /dev/null
+++ b/11-regular-expressions-javascript/13-regexp-ahchors/1-start-end/task.md
@@ -0,0 +1,4 @@
+# Регэксп ^$
+
+Предложите строку, которая подойдёт под регулярное выражение ``pattern`^$`.
+
diff --git a/11-regular-expressions-javascript/13-regexp-ahchors-and-multiline-mode/article.md b/11-regular-expressions-javascript/13-regexp-ahchors/article.md
similarity index 97%
rename from 11-regular-expressions-javascript/13-regexp-ahchors-and-multiline-mode/article.md
rename to 11-regular-expressions-javascript/13-regexp-ahchors/article.md
index c187bd53..16abf01c 100644
--- a/11-regular-expressions-javascript/13-regexp-ahchors-and-multiline-mode/article.md
+++ b/11-regular-expressions-javascript/13-regexp-ahchors/article.md
@@ -1,4 +1,4 @@
-# Начало ^ и конец $ строки, многострочный режим
+# Начало строки ^ и конец $
Знак каретки '^' и доллара '$' имеют в регулярном выражении особый смысл. Их называют "якорями" (anchor - англ.).
[cut]
diff --git a/2-ui/1-document/1-browser-environment/windowObjects.svg b/2-ui/1-document/1-browser-environment/windowObjects.svg
index 5c3e9f39..0299109f 100644
--- a/2-ui/1-document/1-browser-environment/windowObjects.svg
+++ b/2-ui/1-document/1-browser-environment/windowObjects.svg
@@ -6,7 +6,7 @@
-
+ window
diff --git a/2-ui/1-document/17-coordinates/coords.svg b/2-ui/1-document/17-coordinates/coords.svg
index 98134e4e..4cc61710 100644
--- a/2-ui/1-document/17-coordinates/coords.svg
+++ b/2-ui/1-document/17-coordinates/coords.svg
@@ -13,7 +13,7 @@
-
+ <DIV>
diff --git a/2-ui/1-document/4-traversing-dom/article.md b/2-ui/1-document/4-traversing-dom/article.md
index 34d3c627..c19cba4c 100644
--- a/2-ui/1-document/4-traversing-dom/article.md
+++ b/2-ui/1-document/4-traversing-dom/article.md
@@ -354,6 +354,56 @@ alert( table.*!*rows[0].cells[0]*/!*.innerHTML ) // "один"
Аналогичные полезные свойства есть у HTML-форм, они позволяют из формы получить все её элементы, а из них -- в свою очередь, форму. Мы рассмотрим их позже.
+# Интерактивное путешествие
+
+Для того, чтобы убедиться, что вы разобрались с навигацией по DOM-ссылкам -- вашему вниманию предлагается интерактивное путешествие по DOM.
+
+Ниже вы найдёте документ (в ифрейме), и кнопки для перехода по нему.
+
+Изначальный элемент -- ``. Попробуйте по ссылкам найти "информацию". Или ещё чего-нибудь.
+
+Вы также можете открыть документ [в отдельном окне](travel/) и походить по нему в браузерной консоли разработчика, чтобы лучше понять разницу между показанным там DOM и реальным.
+
+Разметка:
+
+[html src="travel/index.html"/]
+
+Документ:
+
+[iframe id="travel-dom-iframe" src="travel" height=150]
+
+
+
+Навигация:
+
+
+
+
+
Здесь стоите вы
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
# Итого
В DOM доступна навигация по соседним узлам через ссылки:
@@ -367,4 +417,16 @@ alert( table.*!*rows[0].cells[0]*/!*.innerHTML ) // "один"
[libs]
d3
domtree
-[/libs]
\ No newline at end of file
+[/libs]
+[head]
+
+
+[/head]
+
diff --git a/2-ui/1-document/4-traversing-dom/dom-links-elements.svg b/2-ui/1-document/4-traversing-dom/dom-links-elements.svg
index 86d91b29..87f94de8 100644
--- a/2-ui/1-document/4-traversing-dom/dom-links-elements.svg
+++ b/2-ui/1-document/4-traversing-dom/dom-links-elements.svg
@@ -1,61 +1,67 @@
-
-
+ #TO
diff --git a/2-ui/3-event-details/3-mousemove-mouseover-mouseout-mouseenter-mouseleave/mouseover-mouseout-over-elems.svg b/2-ui/3-event-details/3-mousemove-mouseover-mouseout-mouseenter-mouseleave/mouseover-mouseout-over-elems.svg
index 32bcd0ca..29db3a7d 100644
--- a/2-ui/3-event-details/3-mousemove-mouseover-mouseout-mouseenter-mouseleave/mouseover-mouseout-over-elems.svg
+++ b/2-ui/3-event-details/3-mousemove-mouseover-mouseout-mouseenter-mouseleave/mouseover-mouseout-over-elems.svg
@@ -6,11 +6,11 @@
-
+ #TO
-
+ #FROM
diff --git a/2-ui/3-event-details/3-mousemove-mouseover-mouseout-mouseenter-mouseleave/mouseover-mouseout.svg b/2-ui/3-event-details/3-mousemove-mouseover-mouseout-mouseenter-mouseleave/mouseover-mouseout.svg
index 6b9e39cc..e39f1416 100644
--- a/2-ui/3-event-details/3-mousemove-mouseover-mouseout-mouseenter-mouseleave/mouseover-mouseout.svg
+++ b/2-ui/3-event-details/3-mousemove-mouseover-mouseout-mouseenter-mouseleave/mouseover-mouseout.svg
@@ -6,7 +6,7 @@
-
+ <DIV>
diff --git a/2-ui/3-event-details/3-mousemove-mouseover-mouseout-mouseenter-mouseleave/mouseover-to-child.svg b/2-ui/3-event-details/3-mousemove-mouseover-mouseout-mouseenter-mouseleave/mouseover-to-child.svg
index 79e7fc8b..fa0d9f92 100644
--- a/2-ui/3-event-details/3-mousemove-mouseover-mouseout-mouseenter-mouseleave/mouseover-to-child.svg
+++ b/2-ui/3-event-details/3-mousemove-mouseover-mouseout-mouseenter-mouseleave/mouseover-to-child.svg
@@ -6,11 +6,11 @@
-
+ #FROM
-
+ #TO
diff --git a/4-ajax/5-xhr-crossdomain/xhr-another-domain.svg b/4-ajax/5-xhr-crossdomain/xhr-another-domain.svg
index 2d91e7fd..8202aaf8 100644
--- a/4-ajax/5-xhr-crossdomain/xhr-another-domain.svg
+++ b/4-ajax/5-xhr-crossdomain/xhr-another-domain.svg
@@ -6,15 +6,15 @@
-
+ JavaScript
-
+ Браузер
-
+ Сервер
diff --git a/4-ajax/5-xhr-crossdomain/xhr-preflight.svg b/4-ajax/5-xhr-crossdomain/xhr-preflight.svg
index b94f9bbc..896f2a37 100644
--- a/4-ajax/5-xhr-crossdomain/xhr-preflight.svg
+++ b/4-ajax/5-xhr-crossdomain/xhr-preflight.svg
@@ -6,15 +6,15 @@
-
+ JavaScript
-
+ Браузер
-
+ Сервер
diff --git a/7-frames-and-windows/1-window-open/article.md b/7-frames-and-windows/1-window-methods/article.md
similarity index 99%
rename from 7-frames-and-windows/1-window-open/article.md
rename to 7-frames-and-windows/1-window-methods/article.md
index 4916fcd3..ab697bb6 100644
--- a/7-frames-and-windows/1-window-open/article.md
+++ b/7-frames-and-windows/1-window-methods/article.md
@@ -1,4 +1,4 @@
-# Открытие новых окон
+# Открытие окон и методы window
Всплывающее окно ("попап" -- от англ. Popup window) -- один из старейших способов показать пользователю ещё один документ.
diff --git a/figures.sketch b/figures.sketch
index 7331f9dc..905a2758 100644
Binary files a/figures.sketch and b/figures.sketch differ