From 35081a779a211fa1128df7352293412a418f40f8 Mon Sep 17 00:00:00 2001 From: Ilya Kantor Date: Sat, 21 Feb 2015 14:58:02 +0300 Subject: [PATCH] renovations --- .../17-function-basics/style.png | Bin 5011 -> 0 bytes 1-js/5-functions-closures/2-closures/1.png | Bin 5865 -> 0 bytes 1-js/5-functions-closures/2-closures/1@2x.png | Bin 9332 -> 0 bytes 1-js/5-functions-closures/2-closures/2.png | Bin 3764 -> 0 bytes 1-js/5-functions-closures/2-closures/2@2x.png | Bin 5834 -> 0 bytes 1-js/5-functions-closures/2-closures/3.png | Bin 5864 -> 0 bytes 1-js/5-functions-closures/2-closures/3@2x.png | Bin 10229 -> 0 bytes 1-js/5-functions-closures/2-closures/4.png | Bin 8795 -> 0 bytes 1-js/5-functions-closures/2-closures/4@2x.png | Bin 14867 -> 0 bytes 1-js/5-functions-closures/2-closures/5.png | Bin 8051 -> 0 bytes 1-js/5-functions-closures/2-closures/5@2x.png | Bin 13745 -> 0 bytes 1-js/5-functions-closures/2-closures/6.png | Bin 13716 -> 0 bytes .../15-metrics/clientWidthNoPadding.png | Bin 14273 -> 0 bytes .../4-slider-events}/slider.png | Bin .../4-slider-events}/solution.md | 12 +- .../4-slider-events/solution.view/index.html | 44 +++++ .../4-slider-events/solution.view/slider.css | 19 ++ .../4-slider-events/solution.view/slider.js | 88 +++++++++ .../5-custom-events/4-slider-events/task.md | 46 +++++ 2-ui/5-widgets/6-what-next/article.md | 32 +++ .../6-slider-events/solution.view/index.html | 183 ------------------ .../6-widget-tasks/6-slider-events/task.md | 45 ----- 2-ui/5-widgets/6-widget-tasks/article.md | 2 - 2-ui/5-widgets/7-what-next/article.md | 21 -- .../1-webcomponents-intro/article.md | 6 +- .../2-webcomponent-core/article.md | 59 +++--- .../1-webcomponents/3-shadow-dom/article.md | 97 ++++++---- 3-more/1-webcomponents/index.md | 3 + archive/menu.html | 79 ++++++++ .../widget-tasks/1-date-selector}/solution.md | 0 .../solution.view/dateselector.js | 0 .../1-date-selector/solution.view/index.html | 0 .../source.view/dateselector.js | 0 .../1-date-selector/source.view/index.html | 0 .../widget-tasks}/1-date-selector/task.md | 0 .../1-tooltip-over-element/solution.md | 0 .../solution.view/index.html | 0 .../source.view/index.html | 0 .../1-tooltip-over-element/task.md | 0 .../tooltip-fixed-center.png | Bin .../tooltip-fixed-center2.png | Bin .../2-draggable-windows/index.html | 0 .../2-draggable-windows/solution.md | 0 .../solution.view/draggableWindow.js | 0 .../solution.view/index.html | 0 .../solution.view/window.css | 0 .../source.view/index.html | 0 .../widget-tasks}/2-draggable-windows/task.md | 0 .../2-moving-tooltip/solution.md | 0 .../2-moving-tooltip/solution.view/index.html | 0 .../2-moving-tooltip/source.view/index.html | 0 .../widget-tasks}/2-moving-tooltip/task.md | 0 .../widget-tasks}/3-resize-img/solution.md | 0 .../3-resize-img/solution.view/index.html | 0 .../3-resize-img/source.view/index.html | 0 .../widget-tasks}/3-resize-img/task.md | 0 .../3-window-manager/solution.md | 0 .../solution.view/draggableWindow.js | 0 .../3-window-manager/solution.view/index.html | 0 .../3-window-manager/solution.view/window.css | 0 .../solution.view/windowManager.js | 0 .../widget-tasks}/3-window-manager/task.md | 0 .../4-double-calendar-with-arrows/solution.md | 0 .../solution.view/calendar.css | 0 .../solution.view/calendar.js | 0 .../solution.view/datepicker.css | 0 .../solution.view/datepicker.js | 0 .../solution.view/index.html | 0 .../source.view/calendar.css | 0 .../source.view/calendar.js | 0 .../source.view/datepicker.css | 0 .../source.view/datepicker.js | 0 .../source.view/index.html | 0 .../4-double-calendar-with-arrows/task.md | 0 .../4-img-select-mouse/solution.md | 0 .../solution.view/index.html | 0 .../4-img-select-mouse/source.view/index.html | 0 .../widget-tasks}/4-img-select-mouse/task.md | 0 .../widget-tasks/5-menu-animated}/solution.md | 0 .../5-menu-animated/solution.view/index.html | 0 .../5-menu-animated/source.view/index.html | 0 .../widget-tasks}/5-menu-animated/task.md | 0 .../5-tree-checkboxes/solution.md | 0 .../5-tree-checkboxes/solution.view/fetch.js | 0 .../solution.view/index.html | 0 .../solution.view/regions.js | 0 .../5-tree-checkboxes/solution.view/tree.css | 0 .../5-tree-checkboxes/solution.view/tree.js | 0 .../5-tree-checkboxes/source.view/index.html | 0 .../widget-tasks}/5-tree-checkboxes/task.md | 0 .../widget-tasks/7-calendar}/solution.md | 0 .../7-calendar}/solution.view/calendar.css | 0 .../7-calendar/solution.view/calendar.js | 0 .../7-calendar/solution.view/index.html | 0 .../7-calendar/source.view/calendar-table.js | 0 .../7-calendar}/source.view/calendar.css | 0 .../7-calendar/source.view/calendar.js | 0 .../7-calendar/source.view/index.html | 0 .../widget-tasks}/7-calendar/task.md | 0 .../widget-tasks/8-autocomplete}/solution.md | 0 .../solution.view/autocomplete-list.js | 0 .../solution.view/autocomplete.css | 0 .../solution.view/autocomplete.js | 0 .../solution.view/filtering-list-provider.js | 0 .../8-autocomplete/solution.view/index.html | 0 .../widget-tasks}/8-autocomplete/task.md | 0 .../9-hover-menu-onclick}/solution.md | 0 .../solution.view/hoverintent.js | 0 .../solution.view/index.html | 0 .../solution.view/menu.css | 0 .../solution.view/menu.js | 0 .../9-hover-menu-onclick/task.md | 0 .../widget-tasks}/article.md | 0 script/clean-unused-png.php | 22 +++ send.sh | 6 - 115 files changed, 439 insertions(+), 325 deletions(-) delete mode 100644 1-js/2-first-steps/17-function-basics/style.png delete mode 100755 1-js/5-functions-closures/2-closures/1.png delete mode 100755 1-js/5-functions-closures/2-closures/1@2x.png delete mode 100755 1-js/5-functions-closures/2-closures/2.png delete mode 100755 1-js/5-functions-closures/2-closures/2@2x.png delete mode 100755 1-js/5-functions-closures/2-closures/3.png delete mode 100755 1-js/5-functions-closures/2-closures/3@2x.png delete mode 100755 1-js/5-functions-closures/2-closures/4.png delete mode 100755 1-js/5-functions-closures/2-closures/4@2x.png delete mode 100755 1-js/5-functions-closures/2-closures/5.png delete mode 100755 1-js/5-functions-closures/2-closures/5@2x.png delete mode 100755 1-js/5-functions-closures/2-closures/6.png delete mode 100755 2-ui/1-document/15-metrics/clientWidthNoPadding.png rename 2-ui/5-widgets/{6-widget-tasks/6-slider-events => 5-custom-events/4-slider-events}/slider.png (100%) mode change 100755 => 100644 rename 2-ui/5-widgets/{6-widget-tasks/6-slider-events => 5-custom-events/4-slider-events}/solution.md (72%) create mode 100644 2-ui/5-widgets/5-custom-events/4-slider-events/solution.view/index.html create mode 100644 2-ui/5-widgets/5-custom-events/4-slider-events/solution.view/slider.css create mode 100644 2-ui/5-widgets/5-custom-events/4-slider-events/solution.view/slider.js create mode 100644 2-ui/5-widgets/5-custom-events/4-slider-events/task.md create mode 100644 2-ui/5-widgets/6-what-next/article.md delete mode 100755 2-ui/5-widgets/6-widget-tasks/6-slider-events/solution.view/index.html delete mode 100644 2-ui/5-widgets/6-widget-tasks/6-slider-events/task.md delete mode 100644 2-ui/5-widgets/6-widget-tasks/article.md delete mode 100644 2-ui/5-widgets/7-what-next/article.md create mode 100644 archive/menu.html rename {2-ui/5-widgets/6-widget-tasks/5-menu-animated => archive/widget-tasks/1-date-selector}/solution.md (100%) rename {2-ui/5-widgets/8-widget-tasks-2 => archive/widget-tasks}/1-date-selector/solution.view/dateselector.js (100%) mode change 100755 => 100644 rename {2-ui/5-widgets/8-widget-tasks-2 => archive/widget-tasks}/1-date-selector/solution.view/index.html (100%) mode change 100755 => 100644 rename {2-ui/5-widgets/8-widget-tasks-2 => archive/widget-tasks}/1-date-selector/source.view/dateselector.js (100%) mode change 100755 => 100644 rename {2-ui/5-widgets/8-widget-tasks-2 => archive/widget-tasks}/1-date-selector/source.view/index.html (100%) mode change 100755 => 100644 rename {2-ui/5-widgets/8-widget-tasks-2 => archive/widget-tasks}/1-date-selector/task.md (100%) rename {2-ui/5-widgets/6-widget-tasks => archive/widget-tasks}/1-tooltip-over-element/solution.md (100%) rename {2-ui/5-widgets/6-widget-tasks => archive/widget-tasks}/1-tooltip-over-element/solution.view/index.html (100%) mode change 100755 => 100644 rename {2-ui/5-widgets/6-widget-tasks => archive/widget-tasks}/1-tooltip-over-element/source.view/index.html (100%) mode change 100755 => 100644 rename {2-ui/5-widgets/6-widget-tasks => archive/widget-tasks}/1-tooltip-over-element/task.md (100%) rename {2-ui/5-widgets/6-widget-tasks => archive/widget-tasks}/1-tooltip-over-element/tooltip-fixed-center.png (100%) mode change 100755 => 100644 rename {2-ui/5-widgets/6-widget-tasks => archive/widget-tasks}/1-tooltip-over-element/tooltip-fixed-center2.png (100%) mode change 100755 => 100644 rename {2-ui/5-widgets/8-widget-tasks-2 => archive/widget-tasks}/2-draggable-windows/index.html (100%) mode change 100755 => 100644 rename {2-ui/5-widgets/8-widget-tasks-2 => archive/widget-tasks}/2-draggable-windows/solution.md (100%) rename {2-ui/5-widgets/8-widget-tasks-2 => archive/widget-tasks}/2-draggable-windows/solution.view/draggableWindow.js (100%) mode change 100755 => 100644 rename {2-ui/5-widgets/8-widget-tasks-2 => archive/widget-tasks}/2-draggable-windows/solution.view/index.html (100%) mode change 100755 => 100644 rename {2-ui/5-widgets/8-widget-tasks-2 => archive/widget-tasks}/2-draggable-windows/solution.view/window.css (100%) mode change 100755 => 100644 rename {2-ui/5-widgets/8-widget-tasks-2 => archive/widget-tasks}/2-draggable-windows/source.view/index.html (100%) mode change 100755 => 100644 rename {2-ui/5-widgets/8-widget-tasks-2 => archive/widget-tasks}/2-draggable-windows/task.md (100%) rename {2-ui/5-widgets/6-widget-tasks => archive/widget-tasks}/2-moving-tooltip/solution.md (100%) rename {2-ui/5-widgets/6-widget-tasks => archive/widget-tasks}/2-moving-tooltip/solution.view/index.html (100%) mode change 100755 => 100644 rename {2-ui/5-widgets/6-widget-tasks => archive/widget-tasks}/2-moving-tooltip/source.view/index.html (100%) mode change 100755 => 100644 rename {2-ui/5-widgets/6-widget-tasks => archive/widget-tasks}/2-moving-tooltip/task.md (100%) rename {2-ui/5-widgets/6-widget-tasks => archive/widget-tasks}/3-resize-img/solution.md (100%) rename {2-ui/5-widgets/6-widget-tasks => archive/widget-tasks}/3-resize-img/solution.view/index.html (100%) mode change 100755 => 100644 rename {2-ui/5-widgets/6-widget-tasks => archive/widget-tasks}/3-resize-img/source.view/index.html (100%) mode change 100755 => 100644 rename {2-ui/5-widgets/6-widget-tasks => archive/widget-tasks}/3-resize-img/task.md (100%) rename {2-ui/5-widgets/8-widget-tasks-2 => archive/widget-tasks}/3-window-manager/solution.md (100%) rename {2-ui/5-widgets/8-widget-tasks-2 => archive/widget-tasks}/3-window-manager/solution.view/draggableWindow.js (100%) mode change 100755 => 100644 rename {2-ui/5-widgets/8-widget-tasks-2 => archive/widget-tasks}/3-window-manager/solution.view/index.html (100%) mode change 100755 => 100644 rename {2-ui/5-widgets/8-widget-tasks-2 => archive/widget-tasks}/3-window-manager/solution.view/window.css (100%) mode change 100755 => 100644 rename {2-ui/5-widgets/8-widget-tasks-2 => archive/widget-tasks}/3-window-manager/solution.view/windowManager.js (100%) mode change 100755 => 100644 rename {2-ui/5-widgets/8-widget-tasks-2 => archive/widget-tasks}/3-window-manager/task.md (100%) rename {2-ui/5-widgets/8-widget-tasks-2 => archive/widget-tasks}/4-double-calendar-with-arrows/solution.md (100%) rename {2-ui/5-widgets/6-widget-tasks/7-calendar => archive/widget-tasks/4-double-calendar-with-arrows}/solution.view/calendar.css (100%) mode change 100755 => 100644 rename {2-ui/5-widgets/8-widget-tasks-2 => archive/widget-tasks}/4-double-calendar-with-arrows/solution.view/calendar.js (100%) mode change 100755 => 100644 rename {2-ui/5-widgets/8-widget-tasks-2 => archive/widget-tasks}/4-double-calendar-with-arrows/solution.view/datepicker.css (100%) mode change 100755 => 100644 rename {2-ui/5-widgets/8-widget-tasks-2 => archive/widget-tasks}/4-double-calendar-with-arrows/solution.view/datepicker.js (100%) mode change 100755 => 100644 rename {2-ui/5-widgets/8-widget-tasks-2 => archive/widget-tasks}/4-double-calendar-with-arrows/solution.view/index.html (100%) mode change 100755 => 100644 rename {2-ui/5-widgets/6-widget-tasks/7-calendar => archive/widget-tasks/4-double-calendar-with-arrows}/source.view/calendar.css (100%) mode change 100755 => 100644 rename {2-ui/5-widgets/8-widget-tasks-2 => archive/widget-tasks}/4-double-calendar-with-arrows/source.view/calendar.js (100%) mode change 100755 => 100644 rename {2-ui/5-widgets/8-widget-tasks-2 => archive/widget-tasks}/4-double-calendar-with-arrows/source.view/datepicker.css (100%) mode change 100755 => 100644 rename {2-ui/5-widgets/8-widget-tasks-2 => archive/widget-tasks}/4-double-calendar-with-arrows/source.view/datepicker.js (100%) mode change 100755 => 100644 rename {2-ui/5-widgets/8-widget-tasks-2 => archive/widget-tasks}/4-double-calendar-with-arrows/source.view/index.html (100%) mode change 100755 => 100644 rename {2-ui/5-widgets/8-widget-tasks-2 => archive/widget-tasks}/4-double-calendar-with-arrows/task.md (100%) rename {2-ui/5-widgets/6-widget-tasks => archive/widget-tasks}/4-img-select-mouse/solution.md (100%) rename {2-ui/5-widgets/6-widget-tasks => archive/widget-tasks}/4-img-select-mouse/solution.view/index.html (100%) mode change 100755 => 100644 rename {2-ui/5-widgets/6-widget-tasks => archive/widget-tasks}/4-img-select-mouse/source.view/index.html (100%) mode change 100755 => 100644 rename {2-ui/5-widgets/6-widget-tasks => archive/widget-tasks}/4-img-select-mouse/task.md (100%) rename {2-ui/5-widgets/6-widget-tasks/7-calendar => archive/widget-tasks/5-menu-animated}/solution.md (100%) rename {2-ui/5-widgets/6-widget-tasks => archive/widget-tasks}/5-menu-animated/solution.view/index.html (100%) mode change 100755 => 100644 rename {2-ui/5-widgets/6-widget-tasks => archive/widget-tasks}/5-menu-animated/source.view/index.html (100%) mode change 100755 => 100644 rename {2-ui/5-widgets/6-widget-tasks => archive/widget-tasks}/5-menu-animated/task.md (100%) rename {2-ui/5-widgets/8-widget-tasks-2 => archive/widget-tasks}/5-tree-checkboxes/solution.md (100%) rename {2-ui/5-widgets/8-widget-tasks-2 => archive/widget-tasks}/5-tree-checkboxes/solution.view/fetch.js (100%) mode change 100755 => 100644 rename {2-ui/5-widgets/8-widget-tasks-2 => archive/widget-tasks}/5-tree-checkboxes/solution.view/index.html (100%) mode change 100755 => 100644 rename {2-ui/5-widgets/8-widget-tasks-2 => archive/widget-tasks}/5-tree-checkboxes/solution.view/regions.js (100%) mode change 100755 => 100644 rename {2-ui/5-widgets/8-widget-tasks-2 => archive/widget-tasks}/5-tree-checkboxes/solution.view/tree.css (100%) mode change 100755 => 100644 rename {2-ui/5-widgets/8-widget-tasks-2 => archive/widget-tasks}/5-tree-checkboxes/solution.view/tree.js (100%) mode change 100755 => 100644 rename {2-ui/5-widgets/8-widget-tasks-2 => archive/widget-tasks}/5-tree-checkboxes/source.view/index.html (100%) mode change 100755 => 100644 rename {2-ui/5-widgets/8-widget-tasks-2 => archive/widget-tasks}/5-tree-checkboxes/task.md (100%) rename {2-ui/5-widgets/6-widget-tasks/8-autocomplete => archive/widget-tasks/7-calendar}/solution.md (100%) rename {2-ui/5-widgets/8-widget-tasks-2/4-double-calendar-with-arrows => archive/widget-tasks/7-calendar}/solution.view/calendar.css (100%) mode change 100755 => 100644 rename {2-ui/5-widgets/6-widget-tasks => archive/widget-tasks}/7-calendar/solution.view/calendar.js (100%) mode change 100755 => 100644 rename {2-ui/5-widgets/6-widget-tasks => archive/widget-tasks}/7-calendar/solution.view/index.html (100%) mode change 100755 => 100644 rename {2-ui/5-widgets/6-widget-tasks => archive/widget-tasks}/7-calendar/source.view/calendar-table.js (100%) mode change 100755 => 100644 rename {2-ui/5-widgets/8-widget-tasks-2/4-double-calendar-with-arrows => archive/widget-tasks/7-calendar}/source.view/calendar.css (100%) mode change 100755 => 100644 rename {2-ui/5-widgets/6-widget-tasks => archive/widget-tasks}/7-calendar/source.view/calendar.js (100%) mode change 100755 => 100644 rename {2-ui/5-widgets/6-widget-tasks => archive/widget-tasks}/7-calendar/source.view/index.html (100%) mode change 100755 => 100644 rename {2-ui/5-widgets/6-widget-tasks => archive/widget-tasks}/7-calendar/task.md (100%) rename {2-ui/5-widgets/6-widget-tasks/9-hover-menu-onclick => archive/widget-tasks/8-autocomplete}/solution.md (100%) rename {2-ui/5-widgets/6-widget-tasks => archive/widget-tasks}/8-autocomplete/solution.view/autocomplete-list.js (100%) mode change 100755 => 100644 rename {2-ui/5-widgets/6-widget-tasks => archive/widget-tasks}/8-autocomplete/solution.view/autocomplete.css (100%) mode change 100755 => 100644 rename {2-ui/5-widgets/6-widget-tasks => archive/widget-tasks}/8-autocomplete/solution.view/autocomplete.js (100%) mode change 100755 => 100644 rename {2-ui/5-widgets/6-widget-tasks => archive/widget-tasks}/8-autocomplete/solution.view/filtering-list-provider.js (100%) mode change 100755 => 100644 rename {2-ui/5-widgets/6-widget-tasks => archive/widget-tasks}/8-autocomplete/solution.view/index.html (100%) mode change 100755 => 100644 rename {2-ui/5-widgets/6-widget-tasks => archive/widget-tasks}/8-autocomplete/task.md (100%) rename {2-ui/5-widgets/8-widget-tasks-2/1-date-selector => archive/widget-tasks/9-hover-menu-onclick}/solution.md (100%) rename {2-ui/5-widgets/6-widget-tasks => archive/widget-tasks}/9-hover-menu-onclick/solution.view/hoverintent.js (100%) mode change 100755 => 100644 rename {2-ui/5-widgets/6-widget-tasks => archive/widget-tasks}/9-hover-menu-onclick/solution.view/index.html (100%) mode change 100755 => 100644 rename {2-ui/5-widgets/6-widget-tasks => archive/widget-tasks}/9-hover-menu-onclick/solution.view/menu.css (100%) mode change 100755 => 100644 rename {2-ui/5-widgets/6-widget-tasks => archive/widget-tasks}/9-hover-menu-onclick/solution.view/menu.js (100%) mode change 100755 => 100644 rename {2-ui/5-widgets/6-widget-tasks => archive/widget-tasks}/9-hover-menu-onclick/task.md (100%) rename {2-ui/5-widgets/8-widget-tasks-2 => archive/widget-tasks}/article.md (100%) create mode 100644 script/clean-unused-png.php delete mode 100644 send.sh diff --git a/1-js/2-first-steps/17-function-basics/style.png b/1-js/2-first-steps/17-function-basics/style.png deleted file mode 100644 index f61d2f8046f8a59c7a97125430562fc352186df2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5011 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 diff --git a/1-js/5-functions-closures/2-closures/1.png b/1-js/5-functions-closures/2-closures/1.png deleted file mode 100755 index 737bb3c5bbaf1e74b9c66482a9ad2a7c4342327a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5865 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 diff --git a/1-js/5-functions-closures/2-closures/1@2x.png b/1-js/5-functions-closures/2-closures/1@2x.png deleted file mode 100755 index 43c32b228263837f3e2c7173d3b8743a15ca8263..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9332 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

sgTSGTau6nQNWUZiw*a_?%ycT0!WsGlH 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 RdEBoz0D~H6yjHgj`!_4hH6Z{1 diff --git a/1-js/5-functions-closures/2-closures/2@2x.png b/1-js/5-functions-closures/2-closures/2@2x.png deleted file mode 100755 index b47c9e4485736ca2a2c6c765c59c175132593cd6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5834 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 JO5jHR{{eNlEu;Vd diff --git a/1-js/5-functions-closures/2-closures/3.png b/1-js/5-functions-closures/2-closures/3.png deleted file mode 100755 index ec0326e8f504f444e7a77db82fb221c45690b38a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5864 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 diff --git a/1-js/5-functions-closures/2-closures/3@2x.png b/1-js/5-functions-closures/2-closures/3@2x.png deleted file mode 100755 index 14b1f1db8eac495a6f27f414dc053ececbfd5bb9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10229 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 diff --git a/1-js/5-functions-closures/2-closures/4.png b/1-js/5-functions-closures/2-closures/4.png deleted file mode 100755 index 71591c2f0de33bf8580fe3e1c87cec822ac1b70c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8795 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 UnqN9-{{BF&AfqZ>A!!`=KQm~sx&QzG diff --git a/1-js/5-functions-closures/2-closures/4@2x.png b/1-js/5-functions-closures/2-closures/4@2x.png deleted file mode 100755 index 5c89966c3f2159f08bbfe0489492ccb4fdae833f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14867 zcmb`ubzEEBvp1R+cWH1aE`g%O-AQnQON(340>z=YgaW}SF2UU?4n+$TY0*L{6o*1_ zFE{jg&hI_vJ%8N$$K9;Y%4GI;&CHU$Gi%Kdt*NerhfRqM008hHV0kD2fC@s=<(MeQ zx z`CpL#uZ;gL>Ob^zhwRsUFC2`H`rlsuRRco6=e8VPtbNP4jI5u;sxqrJ1^N!rB*H-0jj!yj{XiH||cJyoOAChXZFD&fdhpQd8@Q!-00ssOd5P2CL@5Nu)SSHj%*@q73 z6Y~!Jl^8Z==;X*N?$PTNo-tP}Ld<6ic__hFxU!Mq@bG6NsmQ`i3-!0wPe}0km2ynY zJdx@&QvXCG&XHB}Cx<7#Z9}H;(B_h(r_jxJrTf7{-Mb1ud~&Y$nb!eK#TD&sZCj-- z_j{)I$E4u&NE4wIR(cTAa*}!WW9rve-{4!hWbE$Su~gp#ZMWR^Zd&{R^b?6b0FB|Sl_$5tF-PJk+V__vIwpd0Qc5rCG{PV*!~kau(8 zG=AKrx{5WgG_G2)bbCoZxogyf0od+<1DF?0*uop*ECdK6Y6*8P8-EGaOckcj5LEOW zxwI>)nI9Wo$5)F%VV|5gSP#LTHOf!LqMuPDP0}S8SbI)NoN-ey^HL5hiJ1CD7u4j> zZLL_D$oQ_A9X3B`=*(v~N{=EVgKJhUOIbSYGi%4AC9YHJh=*?{{|XrW*MN%m0t9wV z&CtSp(yZg}k~S}fVQ84nW>l zHwahuTqgN4Dm-j6csD=$&%{WmHx$dWNa;DAI6aYb(sW8fnCCI9#mDp*am>jos9v7J@AMAf zVAPr?{dqA$i@XSs>N#&)$UT!s97{l-f0bu4>{6mAOTWIjZ}VX*6oJwRqF^YE4x$qL zKEExm&x~_`>JbXflyx?DoR!JQ(EK8wf+;El3O%r!I^pH5qG+aP;uiy=Ddc^DJG&~% z<0Z;UJ42^5ozH1k~&lTQxHQyRtH{e{ZcDM$lrlQH|1l<#B)lUmB&SH-LPdpge_iO^fsUOP)9`55wV^Y%zWxCQ_=S{P7f} z0N_ZdO3y(A2t<=2%GXY_Eu}UVBJn{Pv3g@(ReWLe^#HXa)>iHshiRDxK zK4-P(&A!cD3Di&hUJ^tsc-lI*d-ZV9M{0mMIV8&BneCf?zrw~+GyNuKy{K?M8(JMq z_y*3Wps%foK|e?b`sy|MJsD%z`-%D~bS!T+or$<@m4$OjQYS?NeGP7> zu?0gN@jdZ1GG(iQ&}zOPRTRl)`o#pyJJZg&p)t%m9hc`}VZ|z+sKrRez7apVJ3e5V zT{VmB=TmCz{hXaG;|Y$6<-G7v_!`VnQUz#_M{5RHsugB{2whqWGeI)@=a7S__9}I+ zQ#4(M0lVD=EAvS$E~A#*=YmI?LCud`6dHqRIx*}CAqFT#L>!VWRMcb6u6viIH%Tml z7@8=#g`sPq;n`NBf!Y$2=#iqaPb?Zxlq0X$`aWj%CPPg7yy{MWC3^I5e*{4mIl3h2 z^X;L{#EM!P99@cN*Nq|R=z2BUJll<_H#l}VEDbxAj^XL=G3uWfIQpevMKzp-};=R1k-=G(Xg7C(iEuF^`? z$t9-7)M(h*oL05h81b}abZ>}DeqnV`?60qLm?Z?H#ftG;_J#`xhmUtpRfZMl6%Zt? zn*mYH6S~Z)!iQda%@*pXv#GM30xA zNiCe4wo%**LiW^}Op&XBs*&BgUTZ;sqW|SfZkA0%K^S)?5lH5Do|Zly)7l->1Y+2L^k?RW zP~h;2kI-cN>d+4p{=wY0`SbVUW5lB|<|TrRV6eFwso>LGyx{0#^HsUOMtPJ};noem2{oqP$$W)XerJVSL% zaelW)FJ>q|+Eb2{_HFKCEphRXHwj_B44e#8ABc)r47IrM(-~X^efZE_?XD|bYUib- zla_pC6Mg#$^uTb7HgG-{hPKRG9)w}7Xqxq0nQEs8W8}E}OV%5l`LMoS{-Cu`Umj~> z;sbuUoK!Y^wE^ehb@d78lk}LvJ!n>$ox;}t^z{?is zZNtCurXYogIGWWXUrxJ@%5Bm)Pn^w0f^rjkb7T7g*q16kwVB?NF{hRZ5;kJuMY)mm zFb{U-RmeHY`bNkJ9VK;fi)Z>p@)Da~24>HMMxUwD8QS%%s1P@yYIh$lfuU>p?AuEV zRTHXKrH@XP$J~6coqD*S^&+U#0f~WyV_y5z#EYCvOkmy(M0)n8qv-a6#T5ppb~YDU z1BtKQAmp7oI!HcNlU&$J&OoAvy0hM+rfB?&RY;5TAh?R5}!!Rk~wYthX7x4Ks~ zjn_e!RoGZiOz3*BK)F*X$NFS({MDd)=6OtRIh-z>4y|tCv5%@g-Z!M*i7*&OJbV!T zr#6~I2sa)#T{U*0G7hxsdXxvQcZaAX)5G;a{bhGIS#hC4GPx2Z*h z)QMC~UQLtOXaJW5!)5JMq2l7*-^-9jhEJ|1S#&ZvJs5@{q)Y)u<|ZQwLx9MYDq9G* z*l2!aKXBx8u8sym1%?Pw18!&$)zrU%pWk09t;(Kn$o$oav} zpMumu6E_!tH6cKxq$CY&A|GZZF#UfO-ZzL^elAL->SFogL=HC7Cm8}_Qe7xRsoWoQ z;j(axQeUQ>bh-f^-4AqXVxEF1T#}R?Xk^1EdyAkua(;c!MUm)Ng-G)UG=DvX=a{e| zCflzEjlrU5J;JKtnxVaB7x01}W(VqR*T-RMtC5;i-U(;CP0&OmXVGSb2L6J9#n(L>cjl7rNV?;`JhV-Rl)C6>%7NUy~hZv9btGkujcVQwF%T zseF_rX_0+nXKrpil8)F0>pW30IMn0hZVo#^K;}a{x`LQTAcqe7$`Y4T8tcrEf>JXt%w1=$5>b zNCyD&nh)l~I9kW2AO{xk8xO8eGPo-9$jOR7yxsPijsv8H<3$K_ zgFcJ)YMEvxl?+9;un$a{6k_DO)`0@072VshEbJ_3Q40smcptf!M^NCRn?m`Gv#%EP z5RmAn9tlSZ?CPOxMqsFWcXSi;bp8vHB-EyJuIy+E5?;;b8s28yV_^_>UTcLqT0*iw zLPCP?aNb)+2bSyAs#Gpa~(%YrRtH5Xomt1_XHCZgES z)40RsgUV8kq*EHv3bDNUSfe{tz91neaULrfRS;Sf z;=DwG^&!1Go6N#?NS77DvCV&KfJ%R6*7I(`4u+8CY9BKya`BRf0)32FuJa@HXhhx3 z1!Es)s39hero~jmI2j}7`4JUE#;I+V4KCBoDjZpQT3;sRsF)#(KK?0m1FmOf!Y|}@yF%${tKfe%E= z``j86M4fY^aY7%i%XOyg3!wltODUp)A~-PV^1CI9LIQuye1w>f2Emg9S<_F3SQOq- z!1iF{gyBvLaoCs#+-xWg#dHJv%nAyP&%WO+m}5i{$iqaXpjH|5+$@rkZXt-gxly`T zX{tq2V6Do=xcx<5@D%sT+duMPB4ECqLDY8nT@7av0@;g4kl+=IR;+V8Rs|_}Efh6v z)bb|F1P1ELeRqPE!b0P0bhNK)OIbLd*=1mc$}k=9v6!ANJ{pU*7XZ3mI3%sb!{3nB zADy^{!15H34fn)_CbM&mxbl-I(kmp_pz#Mn->sG8Ek4hj^+*p#p+WL&FghQ?g$c)KUoN(erhqjkT#FkwI&2{(yD^B+?RYDy}Np_h|* z2i#=?TRvswjG3y>GnUJ)$>0I;<#&u(QN;ioVQCF_L@a(^wh=rTV`WAYROHGqo2RUN z=F!6y3E(Npr!S4S8i(9Q8G3twkqB@|va1f!-quq^Y%v=FgN67)vPy9WDty9cp>{cA zx|G=`nZWyNk-1zODUgRR(2t8el%9#3Ppmp!B15HWKH$S_+>5vX2n1qpR`j-RlQlJ% zot|qTdV4qsejTdL_5-n9;-f>Dk_;SL{js)jfkqe3LhcO*E+cH2A2Bg8TN5yb4`9Xp z*|yLmNt}Z8Dt4sJ&3q*jj(r5yDzH?-ISm0ODPULcv;1lDmUlI%RmxaJ{ANo*8}!x% zQ~E=%!)0LIw>YoPlVnL1U5$5ne&un7jFZ4QGD#-~Ge}_;-oL7Br6TwmftknK#SNMc zp0E96Q{$3k_3Qvp&2K=;tJH7Wfqgts`1l*WJS%o)%Y+dA;yP)UBuNecXn66lCyxQ# zq8@A>6&m z9xu5wCakS&MdZr%mV53FR1yZ$?wprBwV#&UG{}`l_-PCN}NBjM| zA-{nu={2aaF?fpStA^H(*g0m)OHkjsu#`sobDQ(4D;9N_FEvh)i|%v@^Umf6HSB!e zvo?NL9pq0R6kgSXesGz@Ky0G>lPP@4QvXxj7~)DAyVkb9j*ZcW?Q0oPiP{rHy3`^a zL`*}9X|sbe8h8VUSOB)`Xx2QX1%bJ?{Vgo1%%OftP0!_Ft~RW?XB;o2BQcolf6VqE zF856T+;Y=mLdQ_-P03E|&{-7BHBGG@IP^nInGG+g3y-$r?MP5kx+RUcRxzjonmNO^VNVDJ&mkVy$3ZpuHlsfM9xR%;k+Jw}71Ja4?U>aDO)J=Pz(`qEqiKyM_NuVN|J7@w8PId?Wp+&j| zA;9OVu+g*{KLv?w#P-&6X)a13P~hzc;?DuwJ(Ng?v5awGdF9XfO2^S)O-~Md170MTfV?Ne%;5hTiV;5lkVSDXDHJ}oJg~^6=4|M8o6B;oi&_o1G?;DpDYtNTQCYhSPo z(9ceF@e?xsxgoeei@d-5vURT%-7Tv2{N=;6@&kh)jV zKyS1!1ef4xT0itCrv(m33v$Wg1o&GW-NZW)A<_$df4;Y;L!0tcYCK>-@Pj?$DzAQj z43eVwm3zO3)N|-^weMq^7>9#g=ro<#6p7Oj3yLsSRFuIA)9&YIh*pa#Bd#WD5=8n< zTkE^=*-j(41=n7ihAjsuj=Cf^J~E1KU}?@Nv9U7}9!q6Q1**O}?!5T!cd_jCc1Oju zEpoTKBJggI>g~xd7pco1p&Bo|mXRadYZ7F7^+_K&)`y%P>f*vjlQ4V60T#%jSfO?= z4pcQYRb@KIaAzt@lhLSZwzd0e+$Hd$eI?*Q?AfSk;Qh_Y^=wNQa@xgj_8W4M%fj#Q zZr}E>sPZ?BW*(WacA!Jf7E9WeZ~c(u11>XUfyhQkET<8 zE-SI2DtX$GSo@$paxeb#{u-aYGVD$%j@Gy%QA%n~y!rCh!7o{IHD$!amgkN4#?hA% ze`s#b`ufL;*%klm;i@o4i26&7;p=tAFmXk%TxE5|mj__=?;7BGeT)bS^BlPjql4nP zz)OH{l@JT-1^oHYXI72?b=vOx?V~fYg;{7uF5dcLQdUReO~S>J=O21WwEMsgmTm%B zXVuM;FMIne7>P+&?FAPXEPkDD?v9j_;^Q#yXXb4b!+@Clfrp$F23=%-%>-&S99NmBT>a7Y+ zMskVXolm#5%2OIB-#@cVVD)PfQWhRPtNK<89;wKTcUnj65AnT6 zPhC70=UcZCZ+u5@R}}W-z{QXg!ku^WnwvX&%ChcO&^dug8P}-C_v*!xvNJRy`O8gv zY*&^@?`Nae?$V}b^*zgLNJmeH;M&X2#C#j+EtZPDJ9~pxW8s3&LppiSd7IF-7zxDK z{=>Xwe_)vf^oXGeB%b>u9ESkg#Q1$e2y?5!fn@f_{e_K-E-SGJ_~^=Dk9>vCsEE;> zu`gzORAV+J_ShDffTrNRpoDV8`Q8(Tfs@l^6N|&m)5-Ql_m6l&lYA}(+(P@Lh;#=; z>uxp&mjc{EXKJ_cWE=< zy~vA7QRxa`z_w|@+4}^Gn$te^_dr`cSLm~%g0u60Yd2v4==|dJv~mj}tWMFGxo`76 z0SHw&&UkwLduI6|@;9o?mfsyN{F10Orj|oxc7-@%31|2)$v@emSN2cc@0e2Mx#(c~#Z3340S@ zR$@VT6V7LI0M_{1u*5Zho&(dsL1&^+eZU8%DqN3WP95wAO3+FpPQ2Q3e?TmOB8;(P zk!$F&!P|{;Qv0SuAeiW~nOEE`Jg0 zDb7>t54E7pi1naGzwbA)MVQccEQ@XiYiA?M(;^<{T3>FT&!!IfeuBu*ZmT#K`w~|$ zF%RH9+xqAo;aSrdmT2*z(XmApdv;uy7fM~Ah|O`2?r6LZci96R+dt_<@pKe$rxj=C z^if+pg*UEas!ZW#&gXA7o%0uq;cLVyO~Z&**DpsBM(WtusVe)8IKiyiq=7II zFpN9k8cl@=L9SLa;!1b?sZXBz zdf+GZ4eRglt^c;tcJX+r&T_F8PI0+(oR1zV4)U~>_k0`hjEgD5vPW09@hZYuwj39| zi_k2!x2L2~+|Xd9CRwh?ek?v_)Vbl(s&0eaqK?+hN#5h7TBdEpLEikIg2lKVq4p0= zEZm|Y6W%jcJU>J--EprdEqMD0q3>5{quou0D6u!5U*n<|(nr43j9u9IRX@Y+s1bDFwx->YK=zY0_kOE54dK&gDGSoo6bh-GBlF4G+< zuKfJv#94Y8kl<)eWjb1Ay8hR6v2GTS3^5bQ0>(Bv6dKv!K5qb}!k1B|d&ZCJVj8WF zMDrumMyoL9)uyRhnP?Y-4s8~Q%d@dTf_2Fj+Ty2@PEWFxpp#ynGLlXc)GP`O;$%f6 z+N<>G!}9~g3PBa^;T3dfd!D)oiug8zzE361&rq9}8t~Rh%u{??KkiFzXi_Wqki{f6 z7)~WikZQsPDcQ;qu;{v30}dUBi>=Lfn-@a6-w++3thc-(UC&y z{E7pHU6Aa7YB#Y#$MnL2g3WPB1>?8^gD*O*^Ys0|Q>8(&aut3u{@!ykooT?-`XB@w zYC~^p^JMQReF_U^w4>Ab#P7rcdhAb=Y|)5t#jrv26M=~)tRJ{y3;MLK5q}h)BL*TA zfhVC^KwYdK^UCC)Jep6L-=Oo#VUG52F7W}25TitE{my>KYeD%L2)G!lK&8Pb`-g`g zQkLzUIc!lG0#8od&dYr4BPw`jSo|<-L9+Q~ow%8|}}y?afSYub62T zJ(Su=MkMHwWjofDYNB4p2xoZbQr(AaHbfrS(DOALD7D#aWeCmQ48%MzFf;9WiZZ!% zTOOTg;T6O0YQqLlTzxk=mkUz zg<=d{8mjXFVB4!EWUe3w4KvE`;e0-@6hZZh8w8^x1SyBSE;6!M-)QBat6FqtvB^)B zey`O9Z1&6WXr0vH7XGc3gNHvlDW%s1+~Hoi_)>Gj^cIYBIgXp~_>MrM>wMLzrJ>C`c((mpoQYIV&aBvHZQN(w zznZ_<(X^iu8Y&nw`RPl}oou3u%Ff~&Wdva^TW~R^$B0emp*q@ zmWgY6i`(8bklyQ1p(^pklg)(8Ej|z|Z&?l&@MA4Wdq}2Q6{d`h-8Eqm?wfmp-0hm- znIl{?*Hd;yK*zl!6FWn0=fNUVehj0soR9Fa-3ZxRpN9%sibl;wr;trO5j<5l?j56g zKErOeiEw2-V!=&(yvJ|~5(KJPs zEvUe%Y#itlEog-$T>h-Xy|Vf&r+4Q%F*G_9zdcjZ2eW!Ig3?(}0ael5jvpRF;Q}>Bu1B2`Poew% zI?fFHtK=fD!xTbCw1cQq;S^*wN?}cow9Cakaqv{*?>b0tBKxD)7q=S|mhdMPOsoo& zs7m=+msXr17Gg|nDrR4OQ$HNT8Awkl)nVR2?>5IKCj*dY3$CDz^ch^nsXqwt<0M>c z;>VrGdK6A|lh}rzCv>hTc+_{AAZ{`_0>vdeW0S3)kNcUYg4a7b|Ztc2QRRz5FqRcJdG5 zWN%&XCrXlmV>GUfLqBIsW=?Ju20F`d^V34Bhs)(KJgJSCZ$O{V_Pd1_bgh2Ae?H-) zbqiFHI*Hv~I^K-EQ8HTH`x-lO@s2{>=V)?DJCN~GkEZSQQ2w$N>8lRpBQrI&g>VfS zVIQql%w)h1(*O;ou7f`|s_R4mIuTh!HuM z5w^5C%#+8j-Z`5cI$4~cvFjf+^{Bo}RM@+_ptChDe&Ctz=HBhjw~jwj zuB_M31Hr>m1itdx>ty~XTt!rB{7WL%cw*0A&>oXEh<946|QRZ{#6IP)$uu;Md7+ncH(EqrKZ|rKdjYEy|gaHwY zXzCuDPM*>cvuVH}J$E{2WAFkQI}zQ*yUSiwY>_fmhmC_&Hi2{JI0J#ub!|4(eby9j zZ02KG`tY_83Q^R6jB(McFdbI|a?o~r>`+nCM_1e(A3yLTe|Y|Xo$9isWqufyo(C}>N=<4rwf#}mwxoShwZ5v0q74z^0)D`u!J?Q zuq9sM%S+@uoEDE1t7(fi{r;nt=}e3uUxw6Gyr?eC0xq&)9$52F>KOx}wLcg;6`TW^ zQp%%e)47vEB=S%aWi!!xoxZz$)yjkAQytX0YLG5g^494PyJk>rP|)f7|aUX)~ecEln))WHXE`I=ClT)lWR<2)7u&{j!wN3e^rmh zq=2dgmXSfgdIi&%9hAYmOByns@!J=a0~)-Sq&3&^gvUfqF?K_8u$qxz5-IuTA&F}h z{6{p(g$s(<`4p@Q+*PDY&wC*<${c{oYl}{r+%`9UuR<)CAs{3p+|ck1J99?ng()fn z8ffM!^`l%t=!?LqrA9+bYe%!ApS`|M46f=oMOcFB*DOj5g>F6Pb|3BA1GO-g`>Doh z!qxRjeMk}&x%YG`85ozfnZ$%Y%^=020|}>PMzwaHeEMa#i_3`iSd%536Qu{C0(NJs zo+@J<7^aK`_RGPPBH-roP;p7&OFq8Fm`VXq6oG2%ZYlL;bxqJuO@u1K zT*Cr5?CJVWUYPoqIJ?*!ghL&8Zq-WNaexr<|5<%Qjqm?XUt#)_#-1~=5Z;oAmglRP zEwn4EvTE1u^efG5GTa}Z_L5b=s=dxCFFfd|*r2xPe&}A-$)eumwn^Vt`H|kWsu_1R z=xCh_{kg9}8%><%t9~<2Ut;UDZ#^s4=mK36AVDDbr{{xh81hCdi;5dg$x`8#-xB|-T^ zj5>rVyjgEYD%%)gW?74TIU$=|)b)%?NlKCj0m2i#{pb$gJyIez%r1jZ+1$6K22AQCKg5;x|gxY_gQ2A<7qUV0yf zk;Yh@hYOAkJDFgCM2Q1R)(qUOK7xP7zkJzpz@@PkCnfoth~A~fa+z#zwn|RcJFfe3 zm-g`O%yTQ9o2j>d)`(QQI@O8Jec|md1Aa)Y{J~!_iA=J$pR4k_iAgBHnCl@D&_t#w zBtm$F1QlC=8nB@6HcPyp^-#WiNKgm?%6Z74-m+=$u`2! z0cg3872hky*MQd3mtsoH@;~*=@&pcO%D|=|uT2s^M?IiB**(mDy+dx#usdJU?$Iky zs4;uv3ptMCs@)f`C`xcn@6anSs_l%204)>Ncp-~9{@`>HWX=y8@_F}@(?0P-N$m5g zRHD9AovtX`aCfet?7rj-3tq9J(364Hf$Lsk*OHP`XqlU%-At6~2c5=}#V@3dUxIYG9j>CFx^h(|TTk52IV3r7_2Sc$VF?m|#aJ`5J1~JL!XX_krHA zSu&>(6wl0l8MeyBlY08anBeoe2(;WH<+va?&&&YAwdRsaNb@0)~n=^$Er{3jh!1l^kJrS|cSyv9fUMvAT7NZMT z=+&-75sPNg#-m#U>YDP3%)`=EsQi(0CzrPmq zieGfT%4kC%{>3CETAT$*Iw47sy6fOsyY!5x4?_6lH)mp_{Y4*rcvMFQ0b&?UEc4^b zFQs4kLR%QZn)otri%fVH;J`~W=SfSnBuGLZ8IXyZIcLH18(?ukgxlPh9%b5*kpea0 zm{K?f4tyoCy&YTXK6cE$C8>NSU=qTzUQ&v|c5WywPED6q^{hEY_nw$cekx3iG7k@8 zF0j!atq{K#K6PVXQ!w5jj`>~ueIWL$_-+s~Z6^|(@M-SXX~Lt3&*`Qkp)pp_$#ccz zNT4|(9GJ?t!hGB4X~*)DQGu+~^|dq<<2?T}%$2lLniK!LKqHF~v;;X7Oj@*(Lwv%5 zd>>T9Pfi&g^H?+5vOyR#RyRC-#MPx3wX9M-LO1Y!d#0 z<7GGNka10uzOT%=#dQrWnR(C3GS*_xGH{_w+b_J`AHgl&ldC+O2nddSx?ogzbKKQW<&$L8fqY1_iwByVq9SGjTCM(e2~OA}?Zyj6)zt0|&9egqmd7 zrI~6Gxvn68c5+HE7>yCL%eI(_jTF%;3q|g#$254ikZ7gNVZ`t&p%Ldt>e$t5$_z;b zUlGa#U>I=tgtI=`ecwPd~kmUbq3E%$DbamNudpZHtvJ#ylhE>mJ+8j=G%&% zLV?=ueQQ4{rZiYUamv$2$T+Yutz@TB;&~Li@DN0+;28>a6i|2LN0cKD9$wQZ!Y)33 z!li~sE{hbB&siM59E8}uFlEk82KEehBDw^__osdz!BiPQQG!$rUvG@W1>*~gQCq|j zuCkm{>2zE#^}bmpTFj{1-}KR;Wh%M9nqwi$D4vZ(dIQLGmM~C6#=GaRRb`jV@ z6!~XF`^E^-N7Qx8gZ*_7Eqnoguh4tZy(Bqoky-{)9Z90qr@|DEJbfUmg9)ahrz4jR zPz!$3Gz8Ab4H*E0&uQ%D+*ulgd@WJ@s6@tG&on=C)GfyYmv)pOt7dPQ=s?(aR04Ho z%1l3xwbz5=yfphmXZQq>kw!NhR#}*bhXVgK1=Ri+kEf%o6A=YSiLENh$;&2&I{H*u zzZ~ZR&EBLRBJ!Gw@wM`~C=_9iu63`zRiQ{h5rqv2XYutplR*gAJ)UPFFx`uCzOJxq zVK5PslFysA$J|!}h$y??GSkC|+F^73gU38mEoJH``ng*N&<((6$v=Orpa`)e^zFNK zhmsJW?aMsHD-mS0@`Eh)H4wwrQ{M^k+>so_hMS1peyujk_a6A#JU_ompjY#I5Qdy1 zV?xLq`HaOAMvFvjy8_a&ou5o-I~d?HwQ;LVuHb8OIB)rT{ItB6p1p2C*= zZ@8O((xcK%Hr1x4Wv|<@_p0E%mi%u7I?EF1HRFUd0h(DW8HVXewwXFo1AO*ppFXyu zfxT-=TSlzQs&iK8z2& zP^jRGad}(4NPTg0{AQhk{O^SKyHQcQ=K6;*KXgr>5cTFRa+Azjkx?qO&e1EBW){i~ zt(KHx|N1l{Y4F5!hh}l{g~1cUZ=5SW_VS);uOipNL|P}{xgSQg)!!JXYBlChmS(F$ zvl0-I592@z+Kd@oouZC3k&MtXiyr1cx=sJ*4~9&eyg)dV+EDjldI|FaDMQBaq!mNg6ce*ivB B@JIjv diff --git a/1-js/5-functions-closures/2-closures/5.png b/1-js/5-functions-closures/2-closures/5.png deleted file mode 100755 index a1bad61cef988f5cbc8a35e0ec321fd7dd13005f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8051 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 S#pBOGfV8-RShuN diff --git a/1-js/5-functions-closures/2-closures/5@2x.png b/1-js/5-functions-closures/2-closures/5@2x.png deleted file mode 100755 index 08bf3d2fe405ce05ea75fbe39bc5df4eae41105d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13745 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 diff --git a/2-ui/1-document/15-metrics/clientWidthNoPadding.png b/2-ui/1-document/15-metrics/clientWidthNoPadding.png deleted file mode 100755 index a5d9f26b630bc7d78c65e4bb7a3f168054594666..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14273 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 + + + + + + + + + + +
+
+
+ + + Slide:  + Change:  + + + + + + + + + diff --git a/2-ui/5-widgets/5-custom-events/4-slider-events/solution.view/slider.css b/2-ui/5-widgets/5-custom-events/4-slider-events/solution.view/slider.css new file mode 100644 index 00000000..ab985b39 --- /dev/null +++ b/2-ui/5-widgets/5-custom-events/4-slider-events/solution.view/slider.css @@ -0,0 +1,19 @@ +.slider { + margin: 5px; + width: 310px; + height: 15px; + border-radius: 5px; + background: #E0E0E0; + background: -moz-linear-gradient(left top, #E0E0E0, #EEEEEE) repeat scroll 0 0 transparent; + background: -webkit-gradient(linear, left top, right bottom, from(#E0E0E0), to(#EEEEEE)); + background: linear-gradient(left top, #E0E0E0, #EEEEEE); +} +.thumb { + position: relative; + top: -5px; + width: 10px; + height: 25px; + border-radius: 3px; + background: blue; + cursor: pointer; +} \ No newline at end of file diff --git a/2-ui/5-widgets/5-custom-events/4-slider-events/solution.view/slider.js b/2-ui/5-widgets/5-custom-events/4-slider-events/solution.view/slider.js new file mode 100644 index 00000000..21fd7ebe --- /dev/null +++ b/2-ui/5-widgets/5-custom-events/4-slider-events/solution.view/slider.js @@ -0,0 +1,88 @@ +function Slider(options) { + var elem = options.elem; + + var thumbElem = elem.querySelector('.thumb'); + + var max = options.max || 100; + var sliderCoords, thumbCoords, shiftX, shiftY; + + // [<*>----------------] + // |...............| + // first last + var pixelsPerValue = (elem.clientWidth - thumbElem.clientWidth) / max; + + elem.ondragstart = function() { + return false; + }; + + elem.onmousedown = function(event) { + if (event.target.closest('.thumb')) { + startDrag(event.clientX, event.clientY); + return false; // disable selection start (cursor change) + } + } + + function startDrag(startClientX, startClientY) { + thumbCoords = thumbElem.getBoundingClientRect(); + shiftX = startClientX - thumbCoords.left; + shiftY = startClientY - thumbCoords.top; + + sliderCoords = elem.getBoundingClientRect(); + + document.addEventListener('mousemove', onDocumentMouseMove); + document.addEventListener('mouseup', onDocumentMouseUp); + } + + function moveTo(clientX) { + // вычесть координату родителя, т.к. position: relative + var newLeft = clientX - shiftX - sliderCoords.left; + + // курсор ушёл вне слайдера + if(newLeft < 0) { + newLeft = 0; + } + var rightEdge = elem.offsetWidth - thumbElem.offsetWidth; + if(newLeft > rightEdge) { + newLeft = rightEdge; + } + + thumbElem.style.left = newLeft + 'px'; + + elem.dispatchEvent(new CustomEvent('slide', { + bubbles: true, + detail: positionToValue(newLeft) + })); + } + + function valueToPosition(value) { + return pixelsPerValue * value; + } + + function positionToValue(left) { + return Math.round( left / pixelsPerValue); + } + + function onDocumentMouseMove(e) { + moveTo(e.clientX); + } + + function onDocumentMouseUp() { + endDrag(); + } + + function endDrag() { + document.removeEventListener('mousemove', onDocumentMouseMove); + document.removeEventListener('mouseup', onDocumentMouseUp); + + elem.dispatchEvent(new CustomEvent('change', { + bubbles: true, + detail: positionToValue(parseInt(thumbElem.style.left)) + })); + } + + function setValue(value) { + thumbElem.style.left = valueToPosition(value) + 'px'; + } + + this.setValue = setValue; +} diff --git a/2-ui/5-widgets/5-custom-events/4-slider-events/task.md b/2-ui/5-widgets/5-custom-events/4-slider-events/task.md new file mode 100644 index 00000000..bfb371cc --- /dev/null +++ b/2-ui/5-widgets/5-custom-events/4-slider-events/task.md @@ -0,0 +1,46 @@ +# Слайдер с событиями + +[importance 5] + +На основе слайдера из задачи [](/task/slider-widget) создайте графический компонент, который умеет возвращать/получать значение. + +Синтаксис: + +```js +var slider = new Slider({ + elem: document.getElementById('slider'), + max: 100 // слайдер на самой правой позиции соответствует 100 +}); +``` + +Метод `setValue` устанавливает значение: + +```js +slider.setValue(50); +``` + +У слайдера должно быть два события: `slide` при каждом передвижении и `change` при отпускании мыши (установке значения). + +Пример использования: + +```js +var sliderElem = document.getElementById('slider'); + +sliderElem.addEventListener('slide', function(event) { + document.getElementById('slide').innerHTML = event.detail; +}); + +sliderElem.addEventListener('change', function(event) { + document.getElementById('change').innerHTML = event.detail; +}); +``` + +В действии: +[iframe src="solution" height="80"] + +
    +
  • Ширина/высота слайдера может быть любой, JS-код это должен учитывать.
  • +
  • Центр бегунка должен располагаться в точности над выбранным значением. Например, он должен быть в центре для 50 при `max=100`.
  • +
+ +Исходный документ -- возьмите решение задачи [](/task/slider-widget). \ No newline at end of file diff --git a/2-ui/5-widgets/6-what-next/article.md b/2-ui/5-widgets/6-what-next/article.md new file mode 100644 index 00000000..719c411a --- /dev/null +++ b/2-ui/5-widgets/6-what-next/article.md @@ -0,0 +1,32 @@ +# Что изучать дальше + +Если вы прочитали весь учебник и сделали задачи, то на текущий момент вы обладаете важнейшими фундаментальными знаниями и навыками JavaScript. + +[cut] + +В этом разделе мы изучали основы создания компонентов на JavaScript. Если проект большой и сложный, то понадобятся дополнительные инструменты для связывания компонент между собой, для привязки к ним данных и так далее. + +Сейчас существует много фреймворков. Всё активно развивается, меняется, кипит и булькает, может быть из этого получится "общепринятая" архитектура, а может и нет. Сейчас явного победителя нет, выбор фреймворка зависит от проекта и личных предпочтений разработчиков. + +Примеры удачных фреймворков, которые можно изучить: + +
    +
  • [Angular.JS](http://angularjs.org)
  • +
  • [React.JS](http://facebook.github.io/react/) + [Flux](http://facebook.github.io/flux/)
  • +
  • [Backbone.JS](http://backbonejs.org/) + [Marionette](http://marionettejs.com/)
  • +
+ +Также для работы с браузерами понадобятся различные [API](https://ru.wikipedia.org/wiki/%D0%98%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81_%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%D1%8F_%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B9), в частности: + +
    +
  • Работу с окнами и фреймами.
  • +
  • Регулярные выражения, класс `RegExp`.
  • +
  • Объекты `XMLHttpRequest` и `WebSocket` для работы с сервером.
  • +
  • Другие возможности современных браузеров.
  • +
+ +В дополнительных разделах учебника мы обязательно разберём что-то из этого. + +...И, конечно, понадобится система сборки проектов, например [WebPack](http://webpack.github.io/). + +Успехов вам! diff --git a/2-ui/5-widgets/6-widget-tasks/6-slider-events/solution.view/index.html b/2-ui/5-widgets/6-widget-tasks/6-slider-events/solution.view/index.html deleted file mode 100755 index 755942b3..00000000 --- a/2-ui/5-widgets/6-widget-tasks/6-slider-events/solution.view/index.html +++ /dev/null @@ -1,183 +0,0 @@ - - - - - - - - - -
-
-
- -Slide:  -Change:  - - - - - - diff --git a/2-ui/5-widgets/6-widget-tasks/6-slider-events/task.md b/2-ui/5-widgets/6-widget-tasks/6-slider-events/task.md deleted file mode 100644 index 19ccb7b5..00000000 --- a/2-ui/5-widgets/6-widget-tasks/6-slider-events/task.md +++ /dev/null @@ -1,45 +0,0 @@ -# Слайдер с событиями - -[importance 5] - -На основе слайдера из задачи [](/task/slider) создайте графический компонент, который умеет возвращать/получать значение. - -Синтаксис: - -```js -var slider = new Slider({ - elem: $('#slider'), - max: 100 // слайдер на самой правой позиции соответствует 100 -}); -``` - -Метод `setValue` устанавливает значение: - -```js -slider.setValue(50); -``` - -У слайдера должно быть два события: `slide` при каждом передвижении и `change` при отпускании мыши (установке значения). - -Пример использования: - -```js -$(slider).on({ - slide: function(value) { - $('#slide').html(value); - }, - change: function(value) { - $('#change').html(value); - } -}); -``` - -В действии: -[iframe src="solution" height="60"] - -
    -
  • Дизайн слайдера, ширина/высота элементов должна быть изменяемой через CSS, без необходимости трогать JS-код.
  • -
  • Центр бегунка должен располагаться над значением. Например, он должен быть в центре для 50 при максимуме 100.
  • -
- -Исходный документ -- возьмите решение из задачи [](/task/slider). \ No newline at end of file diff --git a/2-ui/5-widgets/6-widget-tasks/article.md b/2-ui/5-widgets/6-widget-tasks/article.md deleted file mode 100644 index 9ce2d312..00000000 --- a/2-ui/5-widgets/6-widget-tasks/article.md +++ /dev/null @@ -1,2 +0,0 @@ -# Практика, практика, практика! - diff --git a/2-ui/5-widgets/7-what-next/article.md b/2-ui/5-widgets/7-what-next/article.md deleted file mode 100644 index c4c730f6..00000000 --- a/2-ui/5-widgets/7-what-next/article.md +++ /dev/null @@ -1,21 +0,0 @@ -# Что изучать дальше - -Если вы прочитали весь учебник и сделали задачи, то на текущий момент вы обладаете важнейшими фундаментальными знаниями JavaScript и квалификацией, чтобы создавать графические компоненты, достойные современного сайта. - -Ещё предстоит изучить: -
    -
  • Работу с окнами и фреймами.
  • -
  • Регулярные выражения.
  • -
  • JavaScript-фреймворк (jQuery?)
  • -
  • Оптимизацию.
  • -
  • AJAX и COMET.
  • -
  • HTML5, возможности современных браузеров.
  • -
- -Кое-что из этого вы можете узнать из дополнительных глав учебника. Многое -- из Open Source. - -Обратите внимание на раздел [](/books). - -Присоединитесь к какому-нибудь интересному проекту и сделайте что-то хорошее. Разберитесь в том, как оно работает. Пофиксите пару багов. - -Успехов вам! \ No newline at end of file diff --git a/3-more/1-webcomponents/1-webcomponents-intro/article.md b/3-more/1-webcomponents/1-webcomponents-intro/article.md index f94feefc..7b55df9d 100644 --- a/3-more/1-webcomponents/1-webcomponents-intro/article.md +++ b/3-more/1-webcomponents/1-webcomponents-intro/article.md @@ -58,7 +58,7 @@
  • "Твиты"
  • -Как мы решаем, что именно выделять в компонент? Конечно, нам подсказывает опыт, но +Как мы решаем, что именно выделять в компонент? Это нам подсказывает опыт и здравый смысл. В случае с твиттером разбиение на компоненты особенно очевидно. Странца "сама распадается" на чётко очерченные блоки, каждый из которых выполняет свою роль. @@ -87,5 +87,7 @@ Веб-компоненты (Web Components) -- это не один стандарт, а целая платформа, комплекс стандартов, которые вместе добавляют в браузер технологии для удобной реализации компонент. -Если глядеть "сверху", то веб-компоненты -- это возможность добавлять свои элементы в браузер, например `document.createElement("tweets-list")`. Но "под капотом" кроются расширенные возможности по инкапсуляции поддерева DOM и стилей, по генерации событий и многое другое. +Если глядеть "сверху", то веб-компоненты -- это возможность добавлять свои элементы в браузер, например `document.createElement("tweets-list")`, которые описываются с помощью классов JavaScript, могут иметь свои методы и свойства. + +Также "под капотом" кроются расширенные возможности по инкапсуляции поддерева DOM и стилей, по генерации событий и многое другое, что мы рассмотрим далее. diff --git a/3-more/1-webcomponents/2-webcomponent-core/article.md b/3-more/1-webcomponents/2-webcomponent-core/article.md index 426b444a..7bd2b6f3 100644 --- a/3-more/1-webcomponents/2-webcomponent-core/article.md +++ b/3-more/1-webcomponents/2-webcomponent-core/article.md @@ -1,19 +1,21 @@ -# Веб-компоненты +# Свои элементы: Custom Elements -Сердцем платформы "веб-компоненты" является стандарт [Web Components](http://w3c.github.io/webcomponents/explainer/), который находится в разработке и позволяет описывать свои элементы. +Платформа "веб-компоненты" включает в себя несколько стандартов [Web Components](http://www.w3.org/standards/techs/components#w3c_all), которые находятся в разработке. + +Начнём мы со стандарта [Custom Elements](http://www.w3.org/TR/custom-elements/), который позволяет создавать свои типы элементов. [cut] -## Зачем Web Components? +## Зачем Custom Elements? -Критично настроенный читатель скажет: "Зачем ещё стандарт для создания своих элементов? Я могу создать любой элемент и прямо сейчас! В любом из современных браузеров можно писать любой HTML, используя свои теги. В чём же разница?" +Критично настроенный читатель скажет: "Зачем ещё стандарт для создания своих элементов? Я могу создать любой элемент и прямо сейчас! В любом из современных браузеров можно писать любой HTML, используя свои теги: ``. Или создавать элементы из JavaScript при помощи `document.createElement('mytag')`. В чём же разница?" -Она в том, что обычно элемент с нестандартным названием (например ``) воспринимается браузером, как нечто неопределённо-непонятное. Ему соответствует класс [HTMLUnknownElement](http://www.w3.org/TR/html5/dom.html#htmlunknownelement), и у него нет каких-либо особых методов. +Она в том, что обычно элемент с нестандартным названием (например ``) воспринимается браузером, как нечто неопределённо-непонятное. Ему соответствует класс [HTMLUnknownElement](http://www.w3.org/TR/html5/dom.html#htmlunknownelement), и у него нет каких-либо особых методов. -**Стандарт Web Components позволяет описывать для новых элементов свои свойства, методы, объявлять свой DOM, подобие конструктора и многое другое.** +**Стандарт Custom Elements позволяет описывать для новых элементов свои свойства, методы, объявлять свой DOM, подобие конструктора и многое другое.** Давайте посмотрим это на примерах. -[warn header="Только Chrome"] -Так как спецификация не окончательна, то для запуска примеров рекомендуется использовать Chrome Canary. +[warn header="Для примеров рекомендуется Chrome"] +Так как спецификация не окончательна, то для запуска примеров рекомендуется использовать Google Chrome, лучше -- последнюю сборку [Chrome Canary](https://www.google.ru/chrome/browser/canary.html), в которой, как правило, отражены последние изменения. [/warn] ## Новый элемент @@ -22,7 +24,7 @@ Здесь:
      -
    • `имя` -- имя нового тега, например `"mega-select"`. Оно обязано содержать дефис `-`. Спецификация требует дефис, чтобы избежать в будущем конфликтов со стандартными элементами HTML. Нельзя создать элемент `timer` или `myTimer` -- будет ошибка.
    • +
    • `имя` -- имя нового тега, например `"mega-select"`. Оно обязано содержать дефис `"-"`. Спецификация требует дефис, чтобы избежать в будущем конфликтов со стандартными элементами HTML. Нельзя создать элемент `timer` или `myTimer` -- будет ошибка.
    • `прототип` -- объект-прототип для нового элемента, он должен наследовать от `HTMLElement`, чтобы у элемента были стандартные свойства и методы.
    @@ -62,7 +64,7 @@ ``` -**Метод `registerElement` может быть вызван в любое время, даже и после появления `` в HTML.** +Использовать новый элемент в HTML можно и до его объявления через `registerElement`. Для этого в браузере предусмотрен специальный режим "обновления" существующих элементов. @@ -72,7 +74,7 @@
  • При вызове `registerElement` такие элементы автоматически обновятся до нужного класса.
  • -Вот демо того, что происходит, когда регистрация элемента происходит после его появления в разметке: +В примере ниже регистрация элемента происходит через 2 секунды после его появления в разметке: ```html @@ -85,7 +87,7 @@ } hello-world { - transition: color 5s; + transition: color 3s; } @@ -103,12 +105,15 @@ } }); +*!* + // у нового типа элементов есть метод sayHi +*/!* hello.sayHi(); }, 2000); ``` -Создание таких элементов в JavaScript никак не отличается от обычных: +Можно создавать такие элементы и в JavaScript -- обычным вызовом `createElement`: ```js var timer = document.createElement('my-timer'); @@ -116,9 +121,11 @@ var timer = document.createElement('my-timer'); ## Расширение встроенных элементов +Выше мы видели пример создания элемента на основе базового `HTMLElement`. Но можно расширить и другие, более конкретные HTML-элементы. + Для расширения встроенных элементов у `registerElement` предусмотрен параметр `extends`, в котором можно задать, какой тег мы расширяем. -Например: +Например, кнопку: ```html @@ -167,7 +174,7 @@ var timer = document.createElement("button", "my-timer"); ## Жизненный цикл -Следующие методы автоматически вызываются во время жизненного цикла элемента: +В прототипе своего элемента мы можем задать специальные методы, которые будут вызываться при создании, добавлении и удалении элемента из DOM: @@ -176,9 +183,9 @@ var timer = document.createElement("button", "my-timer");
    `createdCallback`Элемент создан
    `attributeChangedCallback(name, prevValue, newValue)`Атрибут добавлен, изменён или удалён
    -Как вы, наверняка, заметили, `createdCallback` является подобием конструктора. Можно добавить к элементу свойства, запросить с сервера данные и так далее. +Как вы, наверняка, заметили, `createdCallback` является подобием конструктора. Он вызывается только при создании элемента, поэтому всю дополнительную инициализацию имеет смысл описывать в нём. -Давайте используем `attachedCallback`, чтобы автоматически запускать таймер при вставке в документ: +Давайте используем `createdCallback`, чтобы инициализовать таймер, а `attachedCallback` -- чтобы автоматически запускать таймер при вставке в документ: ```html @@ -186,9 +193,16 @@ var timer = document.createElement("button", "my-timer"); var MyTimerProto = Object.create(HTMLElement.prototype); MyTimerProto.tick = function() { - this.innerHTML++; + this.timer++; + this.innerHTML = this.timer; }; +*!* + MyTimerProto.createdCallback = function() { + this.timer = 0; + }; +*/!* + *!* MyTimerProto.attachedCallback = function() { setInterval(this.tick.bind(this), 1000); @@ -203,10 +217,9 @@ var timer = document.createElement("button", "my-timer"); 0 ``` -Спецификация: -
      -
    • [Introduction to Web Components](http://w3c.github.io/webcomponents/explainer/)
    • -
    • [Custom Elements](http://w3c.github.io/webcomponents/spec/custom/)
    • -
    +## Итого +Мы рассмотрели, как создавать свои DOM-элементы при помощи стандарта [Custom Elements](http://www.w3.org/TR/custom-elements/). + +Далее мы перейдём к изучению дополнительных возможностей по работе с DOM. diff --git a/3-more/1-webcomponents/3-shadow-dom/article.md b/3-more/1-webcomponents/3-shadow-dom/article.md index 9a4697aa..cbdb0bfe 100644 --- a/3-more/1-webcomponents/3-shadow-dom/article.md +++ b/3-more/1-webcomponents/3-shadow-dom/article.md @@ -1,8 +1,8 @@ -# Shadow DOM +# Shadow DOM, шаблоны и стили -Спецификация [Shadow DOM](http://w3c.github.io/webcomponents/spec/shadow/index.html) готовится как отдельный стандарт и применяется, в том числе, отдельно от веб-компонентов. +Спецификация [Shadow DOM](http://w3c.github.io/webcomponents/spec/shadow/) является отдельным стандартом. Частично он уже используется для обычных DOM-элементов, но также применяется для создания веб-компонентов. -*Shadow DOM* -- это внутренний DOM элемента, который существует отдельно от внешнего документа. В нём могут быть свои ID, свои стили и так далее. Причём снаружи оно, без применения специальных техник, не видно, поэтому не возникает конфликтов. +*Shadow DOM* -- это внутренний DOM элемента, который существует отдельно от внешнего документа. В нём могут быть свои ID, свои стили и так далее. Причём снаружи его, без применения специальных техник, не видно, поэтому не возникает конфликтов. [cut] ## Внутри браузера @@ -14,13 +14,11 @@ Например, вот такое содержимое будет у ``: -То, что находится под `shadow-root` -- это и есть Shadow DOM. +То, что находится под `#shadow-root` -- это и есть Shadow DOM. **Получить элементы из Shadow DOM можно только при помощи специальных JavaScript-вызовов или селекторов. Это не обычные дети, а намного более мощное средство отделения содержимого.** -В Shadow DOM выше можно увидеть полезный атрибут `pseudo`. С его помощью можно стилизовать подэлементы через CSS. - -Например, сделаем поле редактирования даты красным: +В Shadow DOM выше можно увидеть полезный атрибут `pseudo`. Он нестандартный, существует по историческим причинам. С его помощью можно стилизовать подэлементы через CSS, например, сделаем поле редактирования даты красным: ```html @@ -35,7 +33,9 @@ input::-webkit-datetime-edit { ``` -Если говорить хронологически, то сначала браузеры начали экспериментировать внутри себя с инкапсуляцией внутренних DOM-структур, а уже потом, через некоторое время, появился стандарт Shadow DOM, который позволяет делать то же самое разработчикам. +Ещё раз заметим, что `pseudo` -- нестандартный атрибут. Если говорить хронологически, то сначала браузеры начали экспериментировать внутри себя с инкапсуляцией внутренних DOM-структур, а уже потом, через некоторое время, появился стандарт Shadow DOM, который позволяет делать то же самое разработчикам. + +Далее мы рассмотрим работу с Shadow DOM из JavaScript, по стандарту [Shadow DOM](http://w3c.github.io/webcomponents/spec/shadow/). ## Создание Shadow DOM @@ -44,7 +44,7 @@ Shadow DOM можно создать внутри любого элемента Например: ```html - +

    Доброе утро, страна!

    ``` -Теперь, если у вас последний Chrome, вы увидите две строчки: "Доброе утро, страна!" в заголовке, а затем "Привет из подполья". +Теперь вы увидите две строчки: "Доброе утро, страна!" в заголовке, а затем "Привет из подполья". Shadow DOM примера выше в инструментах разработки: @@ -80,21 +78,21 @@ Shadow DOM примера выше в инструментах разработ Важные детали:
    • Тег `` влияет только на отображение, он не перемещает узлы физически. Как видно из картинки выше, текстовый узел "Доброе утро, страна!" остался внутри `p#elem`. Его можно даже получить при помощи `elem.firstElementChild`.
    • -
    • Внутри `` показывается не `

      `, а его содержимое, то есть в данном случае текст "Привет из подполья".

    • +
    • Внутри `` показывается не элемент целиком `

      `, а его содержимое, то есть в данном случае текст "Доброе утро, страна!".

    -**Атрибутом `select` можно указать конкретный селектор содержимого, которое нужно переносить. Например, `` перенесёт только заголовки.** +**В `` атрибутом `select` можно указать конкретный селектор содержимого, которое нужно переносить. Например, `` перенесёт только заголовки.** -Внутри Shadow DOM можно использовать `` много раз, указывая таким образом, где конкретно какие части исходного содержимого разместить, но при этом дублирование узлов невозможно. Если узел показан в одном ``, то в следующем он будет пропущен. +Внутри Shadow DOM можно использовать `` много раз с разными значениями `select`, указывая таким образом, где конкретно какие части исходного содержимого разместить. Но при этом дублирование узлов невозможно. Если узел показан в одном ``, то в следующем он будет пропущен. -Например, если сначала идёт ``, а затем ``, то в первом `` будут показаны заголовки `

    ` с классом `big`, а во втором -- все остальные. +Например, если сначала идёт ``, а затем ``, то в первом `` будут показаны заголовки `

    ` с классом `title`, а во втором -- все остальные, кроме уже показанных. -**Содержимое внутри `...` будет показано только в том случае, если узлов для вставки нет.** +В примере выше тег `` внутри пуст. Если в нём указать содержимое, то оно будет показано только в том случае, если узлов для вставки нет. Например потому что ни один узел не подпал под указанный `select`, или все они уже отображены другими, более ранними ``. -Ещё пример: +Например: ```html - +

    Новости

    @@ -103,23 +101,24 @@ Shadow DOM примера выше в инструментах разработ + + ``` При запуске мы увидим, что:
    • Первый `` выведет заголовок.
    • -
    • Второй `` вывел бы автора, но так как такого элемента нет -- выводится содержимое самого ``.
    • -
    • Третий `` выведет остальное содержимое (уже без заголовка `

      `, он выведен ранее!)

    • +
    • Второй `` вывел бы автора, но так как такого элемента нет -- выводится содержимое самого ``, то есть "Без автора".
    • +
    • Третий `` выведет остальное содержимое исходного элемента -- уже без заголовка `

      `, он выведен ранее!

    -Ещё раз обратим внимание, что `` физически не перемещает узлы по DOM. Он только показывает, где их отображать, а также, как мы увидим далее, влияет на применение стилей. Поэтому в примере выше `innerHTML` выведет содержимое `elem`, как если бы не было никакого Shadow DOM. +Ещё раз обратим внимание, что `` физически не перемещает узлы по DOM. Он только показывает, где их отображать, а также, как мы увидим далее, влияет на применение стилей. ## Корень shadowRoot @@ -127,23 +126,30 @@ Shadow DOM примера выше в инструментах разработ Он представляет собой специальный объект, поддерживающий основные методы CSS-запросов и подробно описанный в стандарте как [ShadowRoot](http://w3c.github.io/webcomponents/spec/shadow/#shadowroot-object). -Например: +Если нужно работать с содержимым в Shadow DOM, то нужно перейти к нему через `elem.shadowRoot`. Можно и создать новое Shadow DOM-дерево из JavaScript, например: ```html - +

    Доброе утро, страна!

    ``` @@ -153,23 +159,25 @@ Shadow DOM примера выше в инструментах разработ ## Шаблоны