33let habbits = [ ] ;
44const HABBITS_KEY = 'HABBITS' ;
55
6+ // app
7+ const app = {
8+ 'menu-list' : document . getElementById ( 'sidebar-list' ) ,
9+ } ;
10+
611// ** utility **
712function loadData ( ) {
813 const habbitsStr = localStorage . getItem ( HABBITS_KEY ) ;
@@ -17,7 +22,61 @@ function saveData() {
1722 localStorage . setItem ( HABBITS_KEY , JSON . stringify ( habbits ) ) ;
1823}
1924
20- // загрузка данных.. по сути автоматическая/сразу (соответственно через IIFE)
25+ // ** render **
26+ function rerenderMenu ( activeHabbit ) {
27+ if ( ! activeHabbit ) {
28+ return ;
29+ }
30+
31+ for ( const habbit of habbits ) {
32+ const existed = document . querySelector ( `[menu-habbit-id="${ habbit . id } "]` ) ; // определение/флаг.. есть уже элемент (создавался) или нет
33+
34+ if ( ! existed ) {
35+ // если НЕТ.. создание li/элемента sidebar/меню.. привычки (согласно data)
36+ const habbitItem = document . createElement ( 'li' ) ;
37+ habbitItem . classList . add ( 'sidebar__nav-item' ) ;
38+
39+ const habbitBtn = document . createElement ( 'button' ) ;
40+ habbitBtn . classList . add ( 'sidebar__nav-btn' ) ;
41+ habbitBtn . setAttribute ( 'type' , 'button' ) ;
42+ habbitBtn . setAttribute ( 'aria-label' , 'Выбрать привычку' ) ;
43+ habbitBtn . setAttribute ( 'title' , habbit . title ) ;
44+ habbitBtn . setAttribute ( 'menu-habbit-id' , habbit . id ) ;
45+ habbitBtn . innerHTML = `<img class="sidebar__nav-icon" src="./images/${ habbit . icon } .svg" width="${ habbit . width } " height="${ habbit . height } " alt="Иконка: ${ habbit . name } ">` ;
46+
47+ habbitBtn . addEventListener ( 'click' , ( ) => rerender ( habbit . id ) ) ; // тонкий момент.. по сути "замыкание" для каждой кнопки/её ID.. потом передача именно его/себя в rerender()
48+
49+ // проверка на активность (при создании)
50+ if ( activeHabbit . id === habbit . id ) {
51+ habbitBtn . classList . add ( 'sidebar__nav-btn_active' ) ;
52+ }
53+
54+ habbitItem . append ( habbitBtn ) ;
55+ app [ 'menu-list' ] . append ( habbitItem ) ;
56+ } else {
57+ // если ЕСТЬ.. только обновление "активного" класса
58+ if ( activeHabbit . id === habbit . id ) {
59+ existed . classList . add ( 'sidebar__nav-btn_active' ) ;
60+ } else {
61+ existed . classList . remove ( 'sidebar__nav-btn_active' ) ;
62+ }
63+ }
64+ }
65+ }
66+
67+ // поиск элемента/привычки.. запуск отрисовки/переключение активности
68+ function rerender ( activeHabbitId ) {
69+ const activeHabbit = habbits . find ( ( habbit ) => habbit . id === activeHabbitId ) ;
70+ rerenderMenu ( activeHabbit ) ;
71+ }
72+
73+ // init
2174( ( ) => {
75+ // загрузка данных.. по сути автоматическая/сразу (соответственно через IIFE)
2276 loadData ( ) ;
77+
78+ // запуск работы с sidebar/меню..
79+ if ( habbits . length > 0 ) {
80+ rerender ( habbits [ 0 ] . id ) ; // пока.. принудительно передаёт
81+ }
2382} ) ( ) ;
0 commit comments