рдЯреЙрдбрдПрдорд╡реАрд╕реА рдХреЛ рдбреИрдк рдкрд░ рд▓рд┐рдЦрдирд╛ред рднрд╛рдЧ реи

рдпрд╣ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХрд╛ рджреВрд╕рд░рд╛, рдЕрдВрддрд┐рдо, рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдиреНрдпреВрдирддрдо рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдбреАрдПрд╕ рдЬреЗрдПрд╕ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯреЛрдбреЛрдПрдорд╡реАрд╕реА рдХреНрд▓рд╛рдЗрдВрдЯ рд▓рд┐рдЦрддреЗ рд╣реИрдВред

рдкрд╣рд▓реЗ рднрд╛рдЧ рдХрд╛ рд╕рд╛рд░рд╛рдВрд╢: рд╣рдореЗрдВ JSON рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╕рд░реНрд╡рд░ рд╕реЗ рдПрдХ рдЯреВ-рдбреВ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рд╣реБрдИ, рдЗрд╕рдореЗрдВ рд╕реЗ рдПрдХ HTML рд╕реВрдЪреА рдмрдирд╛рдИ рдЧрдИ, рдкреНрд░рддреНрдпреЗрдХ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдирд╛рдо рдФрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рдЬреЛрдбрд╝рд╛ рдФрд░ рдЗрди рд╕рдВрдкрд╛рджрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд░реНрд╡рд░ рдХреА рдПрдХ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ред

рдпрд╣ рдПрд╣рд╕рд╛рд╕ рд╣реЛрддрд╛ рд╣реИ: рдордирдорд╛рдиреЗ рдорд╛рдорд▓реЛрдВ рдХреЛ рд╣рдЯрд╛рдирд╛, рдирдП рдорд╛рдорд▓реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛, рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рд╕реНрдерд╛рдкрдирд╛ / рд░реАрд╕реЗрдЯ рдХрд░рдирд╛ рдФрд░ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдорд╛рдорд▓реЛрдВ рдХреЛ рдЫрд╛рдирдирд╛ рдФрд░ рд╕рднреА рдкреВрд░реНрдг рдХрд┐рдП рдЧрдП рдорд╛рдорд▓реЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХрд╛ рдХрд╛рд░реНрдпред рдпрд╣реА рд╣рдо рдХрд░реЗрдВрдЧреЗред рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд╛ рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдг, рдЬрд┐рд╕реЗ рд╣рдо рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдЖрдПрдВрдЧреЗ, рдпрд╣рд╛рдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред



рдкрд┐рдЫрд▓реА рдмрд╛рд░ рд╣рдордиреЗ рдЬреЛ рд╡рд┐рдХрд▓реНрдк рдирд┐рдкрдЯрд╛рдпрд╛ рдерд╛, рдЙрд╕реЗ рдпрд╣рд╛рдБ рдирдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

рдпрд╣рд╛рдБ рдЙрд╕рдХрд╛ рдХреЛрдб рд╣реИ:

'#todoapp'.d("" ,'#header'.d("" ,'H1'.d("") ,'INPUT#new-todo placeholder="What needs to be done?" autofocus'.d("") ) ,'#main'.d("" ,'#toggle-all type=checkbox'.d("") ,'UL#todo-list'.d("*@ todos:query" ,'LI'.d("$completed=.completed $editing= $patch=; a!" ,'INPUT.toggle type=checkbox' .d("#.checked=.completed") .ui("$patch=($completed=#.checked)") ,'LABEL.view' .d("? $editing:!; ! .title") .e("dblclick","$editing=`yes") ,'INPUT.edit' .d("? $editing; !! .title@value") .ui("$patch=(.title=#.value)") .e("blur","$editing=") ,'BUTTON.destroy'.d("") ) .a("!? $completed $editing") .u("? $patch; (@method`PATCH .url:dehttp headers $patch@):query $patch=") ) ) ,'#footer'.d("" ,'#todo-count'.d("") ,'UL#filters'.d("" ,'LI'.d("") ) ,'#clear-completed'.d("") ) ) .DICT({ todos : "//todo-backend-express.herokuapp.com/", headers: {"Content-type":"application/json"} }) .FUNC({ convert:{ dehttp: url=>url.replace(/^https?\:/,'') } }) .RENDER() 


рдЕрдм рдпрд╣рд╛рдБ рдХреЗрд╡рд▓ рдкрдЪрд╛рд╕ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рддрдХ рджреЛ-рджреЛ рдмрд╛рд░ рд╣реЛрдВрдЧреЗ - 100 рдХреЗ рд░реВрдк рдореЗрдВред рд╕рд░реНрд╡рд░ рдкрд░ рдХрдИ HTTP рдЕрдиреБрд░реЛрдз рд╣реЛрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рдХреГрдкрдпрд╛ рдбреЗрд╡рд▓рдкрд░ рдЯреВрд▓ рдЦреЛрд▓реЗрдВ (Chrome рдореЗрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдХреЛ рдпрд╛рдж рд╣реИ, Ctrl + Shift + I - рд╡рд╣рд╛рдБ рд╣реЛрдЧрд╛ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдиреЗрдЯрд╡рд░реНрдХ рдЯреИрдм рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд, рдХрдВрд╕реЛрд▓ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдорд╛рд░реЗ рдкреГрд╖реНрда рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдХреЛрдб рджреЗрдЦрдирд╛ рди рднреВрд▓реЗрдВ - рдХреНрд░реЛрдо рдореЗрдВ рдпрд╣ Ctrl + U рд╣реИред

рдпрд╣рд╛рдВ рдореБрдЭреЗ рдереЛрдбрд╝рд╛ рд╡рд┐рд╖рдпрд╛рдВрддрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрджрд┐ рдЖрдкрдиреЗ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХрд╛ рдкрд╣рд▓рд╛ рднрд╛рдЧ рдирд╣реАрдВ рдкрдврд╝рд╛ рд╣реИ, рддреЛ рднреА рдореИрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреВрдВрдЧрд╛ред рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдкрдврд╝рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреБрдЫ рднреА рдирд╣реАрдВ рд╕рдордЭрддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдкрдврд╝рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдореЗрд░реЗ рдкрд┐рдЫрд▓реЗ рджреЛ рд▓реЗрдЦреЛрдВ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ, рдбреИрдк рдХрд╛ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдФрд░ рд╕рд┐рджреНрдзрд╛рдВрдд рд╣рдореЗрд╢рд╛ рдПрдХ рдЕрдкреНрд░рд╕реНрддреБрдд рдкрд╛рдардХ рджреНрд╡рд╛рд░рд╛ рддреБрд░рдВрдд рдирд╣реАрдВ рд╕рдордЭрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдФрд░ рд▓реЗрдЦ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╢рдВрд╕рд┐рдд рдирд╣реАрдВ рд╣реИ рдЬреЛ рд╕реА-рд▓рд╛рдЗрдХ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рд╛рде рдЕрд╕рд╣рдЬ рд╣реИрдВред



рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХрд╛ рдпрд╣ рджреВрд╕рд░рд╛ рднрд╛рдЧ рдкрд╣рд▓реЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧрд╛ред [TODO: рдЯреЛрдХрди рд╕реЗ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдорд╕реНрддрд┐рд╖реНрдХ рдЪрд┐рддреНрд░ рд╡рд┐рд╕реНрдлреЛрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕реНрдХреВрд▓реА рдмрдЪреНрдЪреЗ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реЗрдВ] ред

рдЖрдкрдХреА рдЕрдиреБрдорддрд┐ рд╕реЗ, рдореИрдВ рднрд╛рдЧ 1 рдХреЗ рд╕рд╛рде рдЕрдзреНрдпрд╛рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЬрд╛рд░реА рд░рдЦреВрдВрдЧрд╛ред рд╡рд╣рд╛рдБ рд╣рдордиреЗ 7. рдХреА рдЧрд┐рдирддреА рдХреА,

8. рд░рд╛рдЬреНрдп рдЪрд░ рдХреА рдЯреВ-рдбреВ рд╕реВрдЪреА рдмрдирд╛рдирд╛


рд╕реВрдЪреА рд╕реЗ рдХрд┐рд╕реА рдорд╛рдорд▓реЗ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдЯрди рд╣реИ BUTTON.destroy ред рдирд┐рд╖реНрдХрд╛рд╕рди рдореЗрдВ рд╕рд░реНрд╡рд░ рдХреЛ рдПрдХ DELETE рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рднреА рд╕рд╛рдордЧреНрд░рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдмрдВрдзрд┐рдд UL#todo-list > LI рддрддреНрд╡ UL#todo-list > LI рд╕реЗ рд╣рдЯрд╛рдиреЗ рдХрд╛ рд╕рдорд╛рд╡реЗрд╢ рд╣реИред DELETE рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рдХреЗ рд╕рд╛рде, рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реИ:

  ,'BUTTON.destroy'.ui("(@method`DELETE .url:dehttp):query") 


рд▓реЗрдХрд┐рди рд╕реНрдХреНрд░реАрди рд╕реЗ рдПрдХ рддрддреНрд╡ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд╕рд╛рде, рд╡рд┐рдХрд▓реНрдк рд╕рдВрднрд╡ рд╣реИрдВред рдХреЛрдИ рдмрд╕ рджреВрд╕рд░реЗ рд░рд╛рдЬреНрдп рдЪрд░ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗ рд╕рдХрддрд╛ рд╣реИ, $deleted рдХрд╣ рд╕рдХрддрд╛ $deleted , рдФрд░ deleted CSS рд╡рд░реНрдЧ рд╕рд╣рд┐рдд рд╕реАрдПрд╕рдПрд╕ рдХреЗ рд╕рд╛рде рддрддреНрд╡ рдХреЛ рдЫрд┐рдкрд╛ рд╕рдХрддрд╛ рд╣реИ

  ,'LI'.d("$completed=.completed $editing= $patch= $deleted=; a!" //  $deleted   "" ... ,'BUTTON.destroy'.d("(@method`DELETE .url:dehttp):query $deleted=`yes") //  $deleted -     ) .a("!? $completed $editing $deleted") //   CSS  .deleted{display:none} 


рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рд▓реЗрдХрд┐рди рдпрд╣ рдзреЛрдЦрд╛ рд╣реЛрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд▓рд╛рдЗрди рдХреЗ рдиреАрдЪреЗ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рдХреНрд░рд┐рдп рдФрд░ рдкреВрд░реНрдг рдорд╛рдорд▓реЛрдВ рдХреЗ рдлрд╝рд┐рд▓реНрдЯрд░ рдФрд░ рдХрд╛рдЙрдВрдЯрд░ рд╣реЛрдВрдЧреЗ (рдЬреЛ #footer )ред рдЗрд╕рд▓рд┐рдП, рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ, "рд╢рд╛рд░реАрд░рд┐рдХ рд░реВрдк рд╕реЗ" рд╕реВрдЪреА рд╕реЗ рд╡рд╕реНрддреБ рдХреЛ рддреБрд░рдВрдд рд╣рдЯрд╛ рджреЗрдирд╛ рдмреЗрд╣рддрд░ рд╣реИред рдпрд╣реА рд╣реИ, рд╣рдореЗрдВ рд╕рд░рдгреА рдХреЛ рд╕реНрд╡рдпрдВ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ рд╣рдореЗрдВ рд╢реБрд░реВ рдореЗрдВ рд╕рд░реНрд╡рд░ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реБрдЖ рдерд╛ - рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЗрд╕ рд╕рд░рдгреА рдХреЛ рднреА рдПрдХ рд░рд╛рдЬреНрдп рдЪрд░ рдмрдирдирд╛ рдЪрд╛рд╣рд┐рдПред рдЪрд▓реЛ рдЙрд╕реЗ $todos ред

$todos рдЪрд░ рдХрд╛ рджрд╛рдпрд░рд╛ рдЙрди рд╕рднреА рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдкреВрд░реНрд╡рдЬ рдХрд╛ рдЪрдпрди рдХрд░рдирд╛ рд╣реИ рдЬреЛ рдЗрд╕ рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдФрд░ рдЗрд╕реЗ #header INPUT#new-todo , рдФрд░ #footer рдХрд╛рдЙрдВрдЯрд░реНрд╕, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ UL#todo-list рджреНрд╡рд╛рд░рд╛ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЙрди рд╕рднреА рдХрд╛ рд╕рд╛рдорд╛рдиреНрдп рдкреВрд░реНрд╡рдЬ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдореВрд▓ рддрддреНрд╡ рд╣реИ, #todoapp ред рдЗрд╕рд▓рд┐рдП, рдЗрд╕рдХреЗ рдбреА-рдирд┐рдпрдо рдореЗрдВ рд╣рдо рдЪрд░ $todos рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВрдЧреЗред рдЙрд╕реА рдЬрдЧрд╣ рдкрд░, рд╣рдо рддреБрд░рдВрдд рд╕рд░реНрд╡рд░ рд╕реЗ рдбреЗрдЯрд╛ рдЕрдкрд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВред рдФрд░ UL#todo-list рд▓рд┐рд╕реНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдм рд╣рдо рднреА рдЗрд╕рд╕реЗ рд╣реЛрдВрдЧреЗ:

 '#todoapp'.d("$todos=todos:query" //   $todos      ... ,'UL#todo-list'.d("*@ $todos" //     $todos 


рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдпрджрд┐ рдкрд░реАрдХреНрд╖рдг рдХреЗ рджреМрд░рд╛рди рдЕрдЪрд╛рдирдХ рдЯреВ-рдбреВ рд╕реВрдЪреА рд▓реЛрдб рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ - рдпрд╣ рдмрд╣реБрдд рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдиреЗ рдЙрди рд╕рднреА рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ (рдпрд╣ рдПрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рд░реНрд╡рд░ рд╣реИ, рдФрд░ рд╡рд╣рд╛рдВ рдХреБрдЫ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)ред
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреГрдкрдпрд╛ рдкреВрд░реНрдг-рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рд╡рд╛рд▓реЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдорд╛рдорд▓реЗ рдмрдирд╛рдПрдВред

рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ ред рдпрд╣рд╛рдБ #todoapp рддрддреНрд╡ рдХреЗ рдирд┐рдпрдо рдореЗрдВ $todos рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рддреБрд░рдВрдд рдЖрд░рдореНрдн рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рдиреЗ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдЕрдкреНрд░рд┐рдп рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕рд╛рдордиреЗ рдЖрдИ рд╣реИред рдпрджрд┐ рд╕рд░реНрд╡рд░ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЕрдиреБрд░реЛрдз рдХрд╛ рдЬрд╡рд╛рдм рджреЗрддрд╛ рд╣реИ (Chrome рдЖрдкрдХреЛ рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ: рдбреЗрд╡рд▓рдкрд░ рдЯреВрд▓ рдХреЗ рдиреЗрдЯрд╡рд░реНрдХ рдЯреИрдм рдкрд░, рдЖрдк рдзреАрдореЗ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рдЕрдиреБрдХрд░рдг рдХреЗ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЗ рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ), рддреЛ рдЬрдм рддрдХ рдЕрдиреБрд░реЛрдз рдкреВрд░рд╛ рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рддрдм рддрдХ рд╣рдорд╛рд░рд╛ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдереЛрдбрд╝рд╛ рдЙрджрд╛рд╕ рджрд┐рдЦрддрд╛ рд╣реИ - рд▓реЗрдХрд┐рди рд╕реАрдПрд╕рдПрд╕ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВред рдРрд╕реА рддрд╕реНрд╡реАрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЗрдВ рдЙрддреНрд╕рд╛рд╣ рдирд╣реАрдВ рдЬреЛрдбрд╝реЗрдЧреАред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдкрд┐рдЫрд▓рд╛ рд╕рдВрд╕реНрдХрд░рдг рдЗрд╕рд╕реЗ рдЧреНрд░рд╕реНрдд рдирд╣реАрдВ рдерд╛ - рдЬрдм рддрдХ рдХрд┐ рдкреЗрдЬ рдкрд░ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рд╣реБрдЖ рдерд╛, рддрдм рддрдХ рдХреЗрд╡рд▓ рд╕реВрдЪреА рд╣реА рдЧрд╛рдпрдм рдереА, рд▓реЗрдХрд┐рди рдЕрдиреНрдп рддрддреНрд╡ рддреБрд░рдВрдд рджрд┐рдЦрд╛рдИ рджрд┐рдП, рдбреЗрдЯрд╛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд┐рдП рдмрд┐рдирд╛ред

рдпреЗ рд░рд╣реА рдмрд╛рддред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдХреЛ рдпрд╛рдж рд╣реИ, :query рдХрдирд╡рд░реНрдЯрд░ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╣реИред рдпрд╣ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЗрд╕ рддрдереНрдп рдореЗрдВ рд╡реНрдпрдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЬрдм рддрдХ рдЕрдиреБрд░реЛрдз рдкреВрд░рд╛ рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рд╡рд░реНрддрдорд╛рди рдирд┐рдпрдо рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рдЕрд╡рд░реБрджреНрдз рд╣реЛрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд, рддрддреНрд╡ рдХреА рдкреАрдврд╝реА, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЕрдиреБрд░реЛрдзрд┐рдд рдбреЗрдЯрд╛ (рдЬреЛ рддрд╛рд░реНрдХрд┐рдХ рд╣реИ) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЕрдиреНрдп рддрддреНрд╡реЛрдВ рдХреА рдкреАрдврд╝реА рдЕрд╡рд░реБрджреНрдз рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЬрдм UL#todo-list рдиреЗ рд╕рд░реНрд╡рд░ рддрдХ рдкрд╣реБрдВрдЪ UL#todo-list , рддреЛ рдХреЗрд╡рд▓ рдЗрд╕реЗ рдЕрд╡рд░реБрджреНрдз рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди #header рдирд╣реАрдВ рдФрд░ #footer , рдЬреЛ рддреБрд░рдВрдд рдЦреАрдВрдЪрд╛ рдЧрдпрд╛ рдерд╛ред рдЕрдм рдкреВрд░рд╛ #todoapp рдЕрдиреБрд░реЛрдз рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реИред

9. рдбреЗрдЯрд╛ рд▓реЛрдбрд┐рдВрдЧ рдореЗрдВ рджреЗрд░реА


рд╕реНрдерд┐рддрд┐ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдФрд░ рдЕрд╕рдорд╛рди рддрддреНрд╡реЛрдВ рдХреЛ рд░реЛрдХрдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдбреЗрдЯрд╛ рдХреЗ рд╢реБрд░реБрдЖрддреА рд▓реЛрдбрд┐рдВрдЧ рдХреЛ рд╕реНрдердЧрд┐рдд рдХрд░ рджреЗрдВрдЧреЗ, рдЬрдм рддрдХ рдХрд┐ рд╕рдм рдХреБрдЫ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рддреИрдпрд╛рд░ рди рд╣реЛ рдЬрд╛рдПред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рддреБрд░рдВрдд рдбреЗрдЯрд╛ рдХреЛ $todos рд╡реИрд░рд┐рдПрдмрд▓ рдореЗрдВ рд▓реЛрдб рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рд╣рдо рдЗрд╕реЗ "рдХреБрдЫ рднреА рдирд╣реАрдВ" рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ

 '#todoapp'.d("$todos=" //   $todos    "" 


рдЗрд╕рд▓рд┐рдП рд╡рд╣ рдХреБрдЫ рднреА рдмреНрд▓реЙрдХ рдирд╣реАрдВ рдХрд░реЗрдЧреА рдФрд░ рдкреВрд░рд╛ рдЦрд╛рдХрд╛ рддреИрдпрд╛рд░ рд╣реЛ рдЬрд╛рдПрдЧрд╛ - рднрд▓реЗ рд╣реА рдЦрд╛рд▓реА "рдЯреВ-рдбреВ рд▓рд┐рд╕реНрдЯ" рдХреЗ рд╕рд╛рдеред рд▓реЗрдХрд┐рди рдЕрдм, рдПрдХ рдЙрдмрд╛рдК рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдХреНрд░реАрди рдХреЗ рд╕рд╛рде, рдЖрдк рдПрдХ рдЯреВ-рдбреВ рд╕реВрдЪреА рдХреЛ рдЕрдкрд▓реЛрдб рдХрд░рдХреЗ $todos рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рд╡рдВрд╢ рдХреЛ #todoapp рдЬреЛрдбрд╝реЗрдВ

  ,'loader' .u("$todos=todos:query") //  $todos,       .d("u") //   (u-)    


рдЗрд╕ рддрддреНрд╡ рдХрд╛ рдПрдХ рдпреВ-рдирд┐рдпрдо рд╣реИ рдЬреЛ рдЕрд╡рд░реБрджреНрдз рдирд┐рдпрдо рдХреЗ рдмрд┐рд▓реНрдХреБрд▓ рд╕рдорд╛рди рджрд┐рдЦрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдПрдХ рдореМрд▓рд┐рдХ рдЕрдВрддрд░ рд╣реИред
рдореИрдВ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдбреА-рдирд┐рдпрдо ( рдиреАрдЪреЗ рд╕реЗ ) рддрддреНрд╡ рдкреАрдврд╝реА рдирд┐рдпрдо рд╣реИ рдЬрд┐рд╕реЗ рддрдм рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдЯреЗрдореНрдкрд▓реЗрдЯ рдКрдкрд░ рд╕реЗ рдиреАрдЪреЗ рддрдХ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдорд╛рддрд╛-рдкрд┐рддрд╛ рд╕реЗ рд╡рдВрд╢рдЬ рддрдХ; рдФрд░ рдпреВ-рдирд┐рдпрдо ( рдКрдкрд░ рд╕реЗ ) рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдирд┐рдпрдо рд╣реИрдВ рдЬреЛ рдПрдХ рдРрд╕реА рдШрдЯрдирд╛ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдиреАрдЪреЗ рд╕реЗ рдКрдкрд░ рддрдХ , рдмрдЪреНрдЪреЗ рд╕реЗ рдорд╛рддрд╛-рдкрд┐рддрд╛ рддрдХ рдкреЙрдк рд╣реЛрддреЗ рд╣реИрдВред
рддреЛ, рдЕрдЧрд░ рдХреБрдЫ ("рдХреБрдЫ рднреА рдирд╣реАрдВ" рд╕рд╣рд┐рдд) рдбреА-рдирд┐рдпрдо рдореЗрдВ рдПрдХ рдЪрд░ рдХреЛ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИ , рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЗрд╕ рддрддреНрд╡ рдХреЗ рджрд╛рдпрд░реЗ рдореЗрдВ рдЗрд╕рдХреА рдШреЛрд╖рдгрд╛ рдФрд░ рдЖрд░рдВрднреАрдХрд░рдг рдФрд░ рдЗрд╕рдХреЗ рд╡рдВрд╢рдЬ (рдиреЗрд╕реНрдЯреЗрдб рдЧреБрдВрдЬрд╛рдЗрд╢ рдХреЛ рдбреАрдПрдкреА рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдЬреЗрдПрд╕ рдореЗрдВ рд╣реИред )ред рдЕрдк-рдирд┐рдпрдореЛрдВ рдореЗрдВ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдкрд╣рд▓реЗ рд╕реНрдХреЛрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдЪрд░ рдХрд╛ рд╕рдВрд╢реЛрдзрди ред рдбреА-рдирд┐рдпрдо рдореЗрдВ рдЪрд░реЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдФрд░ рдЖрд░рдВрднрди рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЛ рд╡рдВрд╢рдЬреЛрдВ рдХреЛ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдиреАрдЪреЗ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдФрд░ рд╕рдВрд╢реЛрдзрди рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЛ рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдЕрдкрдбреЗрдЯ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЙрди рд╕рднреА рддрддреНрд╡реЛрдВ рдХрд╛ рдПрдХ рдЙрдкрдпреБрдХреНрдд рдкреБрдирд░реНрдЧрдарди рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВред

loader рддрддреНрд╡, рдЕрдкрдиреЗ рдпреВ-рдирд┐рдпрдо рдореЗрдВ #todoapp рд╡рдВрд╢рдЬ рд╣реЛрдиреЗ рдХреЗ #todoapp , $todos рдЪрд░ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ , рдЗрд╕рдореЗрдВ рд╕рд░реНрд╡рд░ рд╕реЗ рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕ рдЪрд░ рдХреЗ рд╕рднреА рдЙрдкрднреЛрдХреНрддрд╛ рддрддреНрд╡реЛрдВ рдХреЗ рд╕реНрд╡рдд: рдЙрддреНрдерд╛рди рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ (рдФрд░ рдХреЗрд╡рд▓ рдЙрдиреНрд╣реЗрдВ, рдЬреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ!)ред рдПрдХ рдЪрд░ рдХреЗ рдЙрдкрднреЛрдХреНрддрд╛ рдРрд╕реЗ рддрддреНрд╡ рд╣реИрдВ рдЬрд┐рдирдХреЗ рдбреА-рдирд┐рдпрдореЛрдВ рдореЗрдВ рдПрдХ рдЪрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╣ рдЪрд░ рд╣реЛрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддред рдЬреЛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╕рдордп рдЗрд╕ рдЪрд░ (рдЦрд╛рддреЗ рдореЗрдВ рдЧреБрдВрдЬрд╛рдЗрд╢ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП) рдХреЛ рдкрдврд╝рддреЗ рд╣реИрдВ ред

рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ $todos рд╡реИрд░рд┐рдПрдмрд▓ рдХрд╛ рдПрдХ рдЙрдкрднреЛрдХреНрддрд╛ рд╣реИ - рдмрд╣реБрдд UL#todo-list , рдЬреЛ, рддрджрдиреБрд╕рд╛рд░, рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

  ,'UL#todo-list'.d("*@ $todos" //  ,   $todos 


рдЗрд╕рд▓рд┐рдП, рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ #todoapp рдореЗрдВ рдПрдХ рдЯреВ-рдбреВ рд▓рд┐рд╕реНрдЯ рдПрдХ рд╕реНрдЯреЗрдЯ рд╡реЗрд░рд┐рдПрдмрд▓ рд╣реИ, рдЬрдмрдХрд┐ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рд╢реБрд░реБрдЖрддреА рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЛ рдмреНрд▓реЙрдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

10. рд╣рдЯрд╛рдирд╛ рдФрд░ рдЬреЛрдбрд╝рдирд╛-рдХрд░рдирд╛


рдЕрдм рд╣рдо рд╣рд░ рддрд░рд╣ рд╕реЗ $todos рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдЗрдП рдЖрдЗрдЯрдо рдХреЛ рд╣рдЯрд╛рдХрд░ рд╢реБрд░реВ рдХрд░реЗрдВред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдмрдЯрди-рдХреНрд░реЙрд╕ BUTTON.destroy , рдЬреЛ рдЕрдм рддрдХ рдХреЗрд╡рд▓ рд╕рд░реНрд╡рд░ рд╣рдЯрд╛рдиреЗ рдХреЗ рдЕрдиреБрд░реЛрдз рднреЗрдЬрддрд╛ рд╣реИ

  ,'BUTTON.destroy'.ui("(@method`DELETE .url:dehttp):query") 


рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдЗрд╕реА рд╡рд╕реНрддреБ рдХреЛ $todos рдЪрд░ рд╕реЗ рднреА рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдП - рдФрд░ рдЪреВрдВрдХрд┐ рдпрд╣ рдПрдХ рд╕рдВрд╢реЛрдзрди рд╣реЛрдЧрд╛, UL#todo-list , рдЗрд╕ рдЪрд░ рдХреЗ рдЙрдкрднреЛрдХреНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ, рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рд╣рдЯрд╛рдП рдЧрдП рддрддреНрд╡ рдХреЗ рдмрд┐рдирд╛ред

рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ, рдбреЗрдЯрд╛ рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХреЗ рд▓рд┐рдП рдбреАрдПрдкреА рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рд╕рд╛рдзрди рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЬреЗрдПрд╕ рдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдбреАрдПрдкреА рдирд┐рдпрдо рдХреЗрд╡рд▓ рдЙрдиреНрд╣реЗрдВ рдбреЗрдЯрд╛ рд╡рд┐рддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдЙрдард╛рддреЗ рд╣реИрдВред рд╣рдо рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдмрд┐рдирд╛ рдЙрд╕рдХреА рд╕рдВрдЦреНрдпрд╛ рдЬрд╛рдиреЗ рдХрд┐рд╕реА рд╕рд░рдгреА рд╕реЗ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП JS рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣:

 const remove = (arr,tgt)=> arr.filter( obj => obj!=tgt ); 


рдЖрдк рд╢рд╛рдпрдж рдХреБрдЫ рдЕрдзрд┐рдХ рдкреНрд░рднрд╛рд╡реА рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдм рдЙрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИред рдпрд╣ рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд▓рд╛рдЦреЛрдВ рд╡рд╕реНрддреБрдУрдВ рдХреА рдЯреВ-рдбреВ рд╕реВрдЪрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдирдИ рд╕рд░рдгреА рдСрдмреНрдЬреЗрдХреНрдЯ рджреЗрддрд╛ рд╣реИ, рдФрд░ рди рдХреЗрд╡рд▓ рдЙрд╕ рддрддреНрд╡ рдХреЛ рд╣рдЯрд╛рддрд╛ рд╣реИ рдЬреЛ рд╡рд╣ рд╣реИред

рдбреАрдПрдкреА рдирд┐рдпрдореЛрдВ рд╕реЗ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕реБрд▓рдн рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕реЗ .FUNC рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдпрд╣ рддрдп рдХрд░реЗрдВ рдХрд┐ рд╣рдо рдЗрд╕реЗ рдХреИрд╕реЗ рдХреЙрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╡рд┐рдХрд▓реНрдк, рд╢рд╛рдпрдж, рдЗрд╕реЗ рдХрдирд╡рд░реНрдЯрд░ рд╕реЗ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реИ, рдЬреЛ { todos, tgt } рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд┐рдП рдЧрдП рд╕рд░рдгреА рджреЗрддрд╛ рд╣реИ

 .FUNC({ convert:{ dehttp: url => url.replace(/^https?\:/,''), //        remove: x => remove(x.todos,x.tgt) //     } }) 


рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕рд╣реА рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдХреЛрдИ рд░реЛрдХ рдирд╣реАрдВ рд╣реИред .FUNC (рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдХрд╣рд╛ рд╣реИ рдХрд┐ .FUNC рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдирд┐рдпрдорд┐рдд JS рд╡рд┐рдзрд┐ рд╣реИ, рдФрд░ рдЗрд╕рдХрд╛ рддрд░реНрдХ рдПрдХ рдирд┐рдпрдорд┐рдд JS рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ?)

 .FUNC({ convert:{ dehttp: url => url.replace(/^https?\:/,''), remove: x => x.todos.filter( todo => todo!=x.tgt ) } }) 


рдЕрдм рд╣рдо рдЗрд╕ рдХрдирд╡рд░реНрдЯрд░ рдХреЛ рдбреАрдПрдкреА рдирд┐рдпрдореЛрдВ рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

  ,'BUTTON.destroy' .ui("$todos=($todos $@tgt):remove (@method`DELETE .url:dehttp):query") 


рдпрд╣рд╛рдВ, рд╣рдо рдкрд╣рд▓реА рдмрд╛рд░ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ рдХрд┐ JS рд╕рдВрдХреЗрддрди рдореЗрдВ { todos, tgt:$ } рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ, рдЗрд╕реЗ рдкрд╛рд╕ рдХрд░реЗрдВ :remove .FUNC рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрдирд╡рд░реНрдЯрд░ рдХреЛ :remove , рдФрд░ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд┐рдП рдЧрдП рдкрд░рд┐рдгрд╛рдо рдХреЛ $todos рдореЗрдВ .FUNC :remove , рдЬрд┐рд╕рд╕реЗ рдпрд╣ рд╕рдВрд╢реЛрдзрд┐рдд рд╣реЛ рдЬрд╛рдПред рдпрд╣рд╛рдВ $ рддрддреНрд╡ рдХрд╛ рдбреЗрдЯрд╛ рд╕рдВрджрд░реНрдн рд╣реИ , рдЙрд╕ рд╡реНрдпрд╛рдкрд╛рд░ рд╡рд╕реНрддреБ рд╕реЗ $todos рд╕рд░рдгреА рд╣реИ рдЬрд┐рд╕ рдкрд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред @ рдкреНрд░рддреАрдХ рдХреЗ рдмрд╛рдж, рддрд░реНрдХ рдХрд╛ рдЙрдкрдирд╛рдо рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрджрд┐ @ рдЕрдиреБрдкрд╕реНрдерд┐рдд рд╣реИ, рддреЛ рддрд░реНрдХ рдХрд╛ рдЕрдкрдирд╛ рдирд╛рдо рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╣рд╛рд▓ рд╣реА рдореЗрдВ ES6 рдирд╡рд╛рдЪрд╛рд░ рдХреЗ рд╕рдорд╛рди рд╣реИ - рд╕рдВрдкрддреНрддрд┐ рдЖрд╢реБрд▓рд┐рдкрд┐ ред

рдЗрд╕реА рддрд░рд╣, рд╣рдо INPUT#new-todo рддрддреНрд╡ рдФрд░ POST рдЕрдиреБрд░реЛрдз рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реВрдЪреА рдореЗрдВ рдПрдХ рдирдпрд╛ рдорд╛рдорд▓рд╛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ

  ,'INPUT#new-todo placeholder="What needs to be done?" autofocus' .ui("$=(#.value@title) (@method`POST todos@url headers $):query $todos=($todos $@tgt):insert #.value=") ... .FUNC({ convert:{ dehttp: url => url.replace(/^https?\:/,''), remove: x => x.todos.filter( todo => todo!=x.tgt ), //     insert: x => x.todos.concat( [x.tgt] ) //     } }) 


INPUT#new-todo рддрддреНрд╡ рдХреА рдПрдХ рдорд╛рдирдХ UI рдИрд╡реЗрдВрдЯ ( INPUT рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП, change рдИрд╡реЗрдВрдЯ рдХреЛ рдорд╛рдирдХ dap рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ) рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рдирд┐рдпрдо рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ: рдЗрд╕ рддрддреНрд╡ рдХреЗ value рдЧреБрдг рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдирдкреБрдЯ рдкрдврд╝рдирд╛, рдЗрд╕ рдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╕реНрдерд╛рдиреАрдп $ рд╕рдВрджрд░реНрдн .title POST рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рд░реНрд╡рд░, рд╕рдВрджрд░реНрдн $ рдХреЛ рдПрдХ рдирдП рддрддреНрд╡ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рдХрд░ $todos рд╕рд░рдгреА рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЕрдВрдд рдореЗрдВ INPUT рддрддреНрд╡ рдХреА value рд╕рдВрдкрддреНрддрд┐ рдХреЛ рд╕рд╛рдлрд╝ рдХрд░рддрд╛ рд╣реИред

рдпрд╣рд╛рдВ, рдПрдХ рдпреБрд╡рд╛ рдкрд╛рдардХ рдкреВрдЫ рд╕рдХрддрд╛ рд╣реИ: рдПрд░реЗ рдореЗрдВ рддрддреНрд╡ рдЬреЛрдбрд╝рддреЗ рд╕рдордп concat() рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд░реЗрдВ, рдЕрдЧрд░ рдпрд╣ рдирд┐рдпрдорд┐рдд push() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рдПрдХ рдЕрдиреБрднрд╡реА рдкрд╛рдардХ рддреБрд░рдВрдд рд╕рдордЭ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдмрд╛рдд рд╣реИ, рдФрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдЕрдкрдирд╛ рдЙрддреНрддрд░ рд▓рд┐рдЦреЗрдВред

рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реБрдЖред рдорд╛рдорд▓реЛрдВ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕рдВрдмрдВрдзрд┐рдд рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рд░реНрд╡рд░ рдкрд░ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЖрдк рдЗрд╕ рд╕рдордп рдиреЗрдЯрд╡рд░реНрдХ рдЯреИрдм рдХреЛ рдЦреБрд▓реЗ рд░рдЦрддреЗ рд╣реИрдВ, рдареАрдХ рд╣реИ?)ред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдо рдПрдХ рдирдП рд╕рд┐рд░реЗ рд╕реЗ рдЬреЛрдбрд╝реЗ рдЧрдП рдорд╛рдорд▓реЗ рдХрд╛ рдирд╛рдо рдпрд╛ рд╕реНрдерд┐рддрд┐ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЗрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд╕рд░реНрд╡рд░ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ .url рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреЛ рдЗрд╕ рд╡реНрдпрд╡рд╕рд╛рдп рдХреЛ рд╕рд░реНрд╡рд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЬрдм рд╣рдордиреЗ рд╡реНрдпрд╡рд╕рд╛рдп рдмрдирд╛рдпрд╛, .url рдЗрд╕рдХрд╛ рдкрддрд╛ рдирд╣реАрдВ рдерд╛ред рдХреНрд░рдорд╢рдГ, рд╣рдо рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд▓рд┐рдП рд╕рд╣реА PATCH рдЕрдиреБрд░реЛрдз рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддреЗред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдорд╛рдорд▓реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рд╕рд░реНрд╡рд░ рдХреЗ POST рдЕрдиреБрд░реЛрдз рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ, рдФрд░ рдпрд╣ рди рдХреЗрд╡рд▓ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдирдкреБрдЯ рд╕реЗ, рдмрд▓реНрдХрд┐ рд╕рд░реНрд╡рд░ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдПрдХ рдирдИ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рд╡рд╕реНрддреБ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕рд╣реА рд╣реЛрдЧрд╛, рдФрд░ рд╕рднреА рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдХреЗ рд╕рд╛рде рдЗрд╕ рд╡рд╕реНрддреБ рдХреЛ $todos рдЬреЛрдбрд╝реЗрдВред рд╕рд░реНрд╡рд░ рдЬрд╛рдирдХрд╛рд░реА .url рдлрд╝реАрд▓реНрдб рд╕рд╣рд┐рдд

  ,'INPUT#new-todo placeholder="What needs to be done?" autofocus' .ui("$todos=($todos (@method`POST todos@url headers (#.value@title)):query@tgt ):insert #.value=") 


рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ - рдареАрдХ рд╣реИ, рдЕрдм рд╕рдм рдХреБрдЫ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рдирдП рд╕рд┐рд░реЗ рд╕реЗ рдмрдирд╛рдП рдЧрдП рдорд╛рдорд▓реЛрдВ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд░реНрд╡рд░ рдХреЛ рд╕реВрдЪрдирд╛рдПрдВ рд╕рд╣реА рдЬрд╛рддреА рд╣реИрдВред

рдХреЛрдИ рднреА рдЗрд╕ рдкрд░ рд░реЛрдХ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди ... рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдХрд░реАрдм рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЕрднреА рднреА рдирдП рдорд╛рдорд▓реЗ рдХреЗ рдирд╛рдо рджрд░реНрдЬ рдХрд░рдиреЗ рдФрд░ рд╕реВрдЪреА рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реЗ рдкрд▓ рдХреЗ рдмреАрдЪ рдереЛрдбрд╝реА рджреЗрд░реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдПрдХ рдирдХрд▓реА рдзреАрдореЗ рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рдЪрд╛рд▓реВ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рджреЗрд░реА рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдорд╛рдорд▓рд╛ рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрд░реЛрдз рд╣реИ: рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рд╕рд░реНрд╡рд░ рд╕реЗ рдПрдХ рдирдП рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╣реА рд╣рдо $todos рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЕрдЧрд▓рд╛ рдХрджрдо, рд╣рдо рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рдореИрдВ рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдПрдХ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдмрд┐рдВрджреБ рдХреА рдУрд░ рдореЛрдбрд╝реВрдВрдЧрд╛ред рдпрджрд┐ рд╣рдо рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдереЛрдбрд╝рд╛ рдкреАрдЫреЗ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдзреНрдпрд╛рди рджреЗрддреЗ рд╣реИрдВ: рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрдиреБрд░реЛрдз рднреА рд╣реИ, рдирдпрд╛ рдорд╛рдорд▓рд╛ рддреБрд░рдиреНрдд рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдмрд┐рдирд╛ рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд┐рдП

  //    , :query   .ui("$=(#.value@title) (@method`POST todos@url headers $):query $todos=($todos $@tgt):insert #.value=") 


рдпрд╣ рдбреИрдк рдореЗрдВ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХрдиреНрд╡рд░реНрдЯрд░реНрд╕ рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдПрдХ рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ: рдпрджрд┐ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХрдирд╡рд░реНрдЯрд░ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЕрд░реНрдерд╛рдд, рдЗрд╕реЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИ), рддреЛ рдЖрдк рдЗрд╕рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ - рдФрд░ рдирд┐рдпрдо рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рдЕрд╡рд░реБрджреНрдз рдирд╣реАрдВ рд╣реИред рдпрд╣ рдЕрдХреНрд╕рд░ рдЙрдкрдпреЛрдЧреА рд╣реЛрддрд╛ рд╣реИ: рдЖрдкрдиреЗ рджреЗрдЦрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рд╕реВрдЪреА рд╕реЗ рдорд╛рдорд▓реЛрдВ рдХреЛ рд╣рдЯрд╛рддреЗ рд╕рдордп, рд╡реЗ DELETE рдЕрдиреБрд░реЛрдз рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд┐рдП рдмрд┐рдирд╛, рддреБрд░рдВрдд рд╕реНрдХреНрд░реАрди рд╕реЗ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдпрджрд┐ рдЖрдк рдиреЗрдЯрд╡рд░реНрдХ рдкреИрдирд▓ рдореЗрдВ рдХрдИ рдорд╛рдорд▓реЛрдВ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рд╣рдЯрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рддреЗ рд╣реИрдВред

рд▓реЗрдХрд┐рди, рдЪреВрдВрдХрд┐ рд╣рдо POST рдЕрдиреБрд░реЛрдз рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ - рдЗрд╕реЗ $ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЕрд╕рд╛рдЗрди рдХрд░реЗрдВ - рд╣рдореЗрдВ рдЗрд╕реЗ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рдЖрдкрдХреЛ POST рдЕрдиреБрд░реЛрдз рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ $todos рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рдЦреЛрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╕рдорд╛рдзрд╛рди: рдлрд┐рд░ рднреА, рдкрд╣рд▓реЗ рдПрдХ рдирдИ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рд╡рд╕реНрддреБ рдмрдирд╛рдПрдВ рдФрд░ рддреБрд░рдВрдд рдЗрд╕реЗ $todos рдЬреЛрдбрд╝реЗрдВ, рд╕реВрдЪреА рдХреЛ рдбреНрд░рд╛ рд╣реЛрдиреЗ рджреЗрдВ, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА, рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдпрджрд┐ рд╡реНрдпрд╡рд╕рд╛рдп рдореЗрдВ .url рдирд╣реАрдВ рд╣реИ (рдпрд╛рдиреА, рд╡реНрдпрд╡рд╕рд╛рдп рдЕрднреА рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ), рдПрдХ POST рдЕрдиреБрд░реЛрдз рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ, рдФрд░ред рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЗ рдбреЗрдЯрд╛ рд╕рдВрджрд░реНрдн рдкрд░ рдЕрдкрдирд╛ рдкрд░рд┐рдгрд╛рдо рд▓рд╛рдЧреВ рдХрд░реЗрдВред

рдЗрд╕рд▓рд┐рдП, рдкрд╣рд▓реЗ рд╣рдо рдХреЗрд╡рд▓ .title рдореЗрдВ рдХреЗрд╡рд▓ .title рд╡рд╛рд▓реЗ рд░рд┐рдХреНрдд рдХреЛ .title

  ,'INPUT#new-todo placeholder="What needs to be done?" autofocus' .ui("$todos=($todos (#.value@title)@tgt):insert #.value=") 


UL#todo-list > LI рдПрд▓рд┐рдореЗрдВрдЯ рдЬреЗрдирд░реЗрд╢рди рд░реВрд▓ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ a! рддрддреНрд╡ рдХреЛ рдкрд╣рд▓реА рдмрд╛рд░ рдЦреАрдВрдЪрдиреЗ рдХреЗ рдмрд╛рдж рдПрдХ рдирд┐рдпрдо рд╢реБрд░реВ рдХрд░рдирд╛ред рд╡рд╣рд╛рдБ рд╣рдо .url рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ POST рдЕрдиреБрд░реЛрдз рдХреЗ рд▓реЙрдиреНрдЪ рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдЕрддрд┐рд░рд┐рдХреНрдд рдлрд╝реАрд▓реНрдбреНрд╕ рдХреЛ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, dap рдХрд╛ & рдСрдкрд░реЗрдЯрд░ рд╣реИ

  .a("!? $completed $editing; ? .url:!; & (@method`POST todos@url headers $):query") 


рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ ред рдПрдХ рдФрд░ рдмрд╛рдд! рдзреАрдореЗ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд╕рд╛рде рднреА, рдЯреВ-рдбреВ рд╕реВрдЪреА рдХреЛ рддреБрд░рдВрдд рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╕рд░реНрд╡рд░ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдФрд░ рдЕрдиреБрдкрд▓рдмреНрдз рдбреЗрдЯрд╛ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рдЕрджреНрдпрддрди рд╕реВрдЪреА рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╣реЛрддреА рд╣реИред

11. рд╕рдмрдХреЛ рджрд╛рд╡!


#header рддрддреНрд╡ рдореЗрдВ рд╕реВрдЪреА рдореЗрдВ рд╕рднреА рдорд╛рдорд▓реЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рд╕рдВрд╕реНрдерд╛рдкрди / рд░реАрд╕реЗрдЯ рдХрд╛ рдмрдЯрди рд╣реЛрддрд╛ рд╣реИред рд╕рд░рдгреА рдХреЗ рддрддреНрд╡реЛрдВ рдХреЗ рдорд╛рдиреЛрдВ рдХреЗ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕рд┐рд░реНрдл рдПрдХ рдФрд░ рдХрдиреНрд╡рд░реНрдЯрд░ рд▓рд┐рдЦрддреЗ рд╣реИрдВ :assign , рдФрд░ INPUT#toggle-all рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдЗрд╕реЗ $todos рдкрд░ рд▓рд╛рдЧреВ рдХрд░реЗрдВ

  ,'INPUT#toggle-all type=checkbox' .ui("$todos=($todos (#.checked@completed)@src):assign") ... assign: x => x.todos && x.todos.map(todo => Object.assign(todo,x.src)) 


рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдХреЗрд╡рд▓ .completed рдлрд╝реАрд▓реНрдб рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рджреЗрдЦрдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдХрдирд╡рд░реНрдЯрд░ рд╕реЗ рдЖрдк рд╕рд░рдгреА рддрддреНрд╡реЛрдВ рдХреЗ рдХрд┐рд╕реА рднреА рдлрд╝реАрд▓реНрдб рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред
рдареАрдХ рд╣реИ, $todos рд╕рд░рдгреА рдореЗрдВ $todos рд╕реНрд╡рд┐рдЪ $todos , рдЕрдм рд╣рдореЗрдВ рд╕рд░реНрд╡рд░ рдХреЛ рдХрд┐рдП рдЧрдП рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореВрд▓ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдпрд╣ рдкреНрд░рддреНрдпреЗрдХ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП PATCH рдЕрдиреБрд░реЛрдз рднреЗрдЬрдХрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдмрд╣реБрдд рдкреНрд░рднрд╛рд╡реА рд░рдгрдиреАрддрд┐ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдм рд╣рдо рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдареАрдХ рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдПрдХ PATCH рдЕрдиреБрд░реЛрдз рднреЗрдЬрддреЗ рд╣реИрдВ

  .ui("*@ $todos=($todos (#.checked@completed)@src):assign; (@method`PATCH .url:dehttp headers (.completed)):query") 


рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ : рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдбреЙрд╡ рдкрд░ рдПрдХ рдХреНрд▓рд┐рдХ рд╕рднреА рд╡реНрдпрдХреНрддрд┐рдЧрдд рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд╕рдВрд░реЗрдЦрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╕рд░реНрд╡рд░ рдХреЛ рдЙрдкрдпреБрдХреНрдд рдкреИрдЯ рдЕрдиреБрд░реЛрдзреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕реВрдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдорд╛рдирдХред

12. рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЫрд╛рдирдиреЗ рдХреЗ рдорд╛рдорд▓реЗ


рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЯреВ-рдбреВ рд╕реВрдЪреА рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрд╡реЗрджрди рдХреЛ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдФрд░ рдкреВрд░реНрдг рдФрд░ рдЕрдкреВрд░реНрдг рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдХрд╛рдЙрдВрдЯрд░ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рдорд╛рдорд▓реЛрдВ рджреНрд╡рд╛рд░рд╛ рдорд╛рдорд▓реЛрдВ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдореЗрдВ рднреА рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдмреЗрд╢рдХ, рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо JS рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рдЙрд╕реА filter() рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреБрдЪреНрдЫ рд╣реЛрдВрдЧреЗред

рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдорд╛рдорд▓реЗ рдХрд╛ .completed рдлрд╝реАрд▓реНрдб рд╣рдореЗрд╢рд╛ рд╕рддреНрдп рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдЬрдм рдЖрдк рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдХреЗрд╕ рдХрд╛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрдВрдЬрд╛ $completed рдЪрд░ рдХреЗ рд╕рд╛рде рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкрд╣рд▓реЗ, рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рдерд╛, рд▓реЗрдХрд┐рди рдЕрдм рдпрд╣ рд╣реЛрдЧрд╛ред

  ,'INPUT.toggle type=checkbox' .d("#.checked=.completed") .ui("$patch=(.completed=$completed=#.checked) $recount=()") //  .completed        


рдпрд╣рд╛рдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдорд╛рдорд▓реЗ рдХрд╛ рдбреЗрдЯрд╛ рд╕рдВрджрд░реНрдн рдХреЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реА рд╣реИ, рдЬреЛ $todos рд╕рд░рдгреА рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИред рдПрдХ рдкреНрд░рддрд┐, рдпрд╛ рд╕рдВрдмрдВрдзрд┐рдд рдирд┐рд░реНрдорд╛рдг рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рд╡рд╕реНрддреБред рдФрд░ рд╕рднреА рдлрд╝реАрд▓реНрдбреНрд╕ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВред .title , .completed url - рдкрдврд╝рдирд╛ рдФрд░ рд▓рд┐рдЦрдирд╛ рджреЛрдиреЛрдВ - рдЗрд╕ рд╡рд╕реНрддреБ рдкрд░ рд╕реАрдзреЗ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, $todos рд╕рд░рдгреА рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЫрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдорд╛рдорд▓реЗ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рди рдХреЗрд╡рд▓ рд╕реНрдХреНрд░реАрди рдкрд░ .completed рдореЗрдВ, рдмрд▓реНрдХрд┐ .completed рд╡рд╕реНрддреБ рдХреЗ .completed рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рднреА рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдПред

рдХреЗрд╡рд▓ рдкреВрд░реНрдгрддрд╛ рдХреЗ рдЖрд╡рд╢реНрдпрдХ рд╕рдВрдХреЗрдд рдХреЗ рд╕рд╛рде рдорд╛рдорд▓реЛрдВ рдХреЛ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдПред рд╕реВрдЪреА рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдЪрдпрдирд┐рдд рдлрд┐рд▓реНрдЯрд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░ $todos .completed рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░реЗрдВрдЧреЗред рдЪрдпрдирд┐рдд рдлрд╝рд┐рд▓реНрдЯрд░ рд╣реИ, рдЖрдкрдиреЗ рдпрд╣ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рд╣реИ, рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХрд╛ рдПрдХ рдФрд░ рд░рд╛рдЬреНрдп рдЪрд░ рд╣реИ, рдФрд░ рд╣рдо рдЗрд╕реЗ рдХреЙрд▓ рдХрд░реЗрдВрдЧреЗ: $filter ред рдЪрдпрдирд┐рдд $filter рдЕрдиреБрд╕рд╛рд░ $todos рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП $filter рд╣рдо рдердВрдмрдиреЗрд▓ рдХреЗ рд╕рд╛рде рдЪрд▓рддреЗ рд╣реИрдВ рдФрд░ рдХреЗрд╡рд▓ { рдХрдирд╡рд░реНрдЯрд░, рдлрд╝реЙрд░реНрдо } рдлрд╝рд┐рд▓реНрдЯрд░ рдХреА рдЧрдИ рд╕реВрдЪреА рдореЗрдВ рдПрдХ рдФрд░ рдХрдирд╡рд░реНрдЯрд░ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдФрд░ рд╣рдо "рд╕рд╛рд╣рдЪрд░реНрдп рд╕рд░рдгреА" (рдпрд╛рдиреА, рд╕рд╛рдзрд╛рд░рдг JS) рд╕реЗ рдирд╛рдо рдФрд░ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рд▓реЗрдВрдЧреЗред рдСрдмреНрдЬреЗрдХреНрдЯ) todoFilters

 const todoFilters={ "All": null, "Active": todo => !todo.completed, "Completed": todo => !!todo.completed }; '#todoapp'.d("$todos= $filter=" //   $filter ... ,'UL#todo-list'.d("* ($todos $filter):filter" ... ,'UL#filters'.d("* filter" //  filter      .DICT ,'LI' .d("! .filter") .ui("$filter=.") //    "$filter=.filter" ) ... .DICT({ ... filter: Object.keys(todoFilters) //["All","Active","Completed"] }) .FUNC({ convert:{ ... filter: x =>{ const a = x.todos, f = x.filter && todoFilters[x.filter]; return a&&f ? a.filter(f) : a; } } }) 


рд╣рдо рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ ред рдлрд┐рд▓реНрдЯрд░ рдареАрдХ рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдореЗрдВ рдПрдХ рдмрд╛рд░реАрдХрд┐рдпрд╛рдВ рд╣реИ рдХрд┐ рдлрд┐рд▓реНрдЯрд░ рдХреЗ рдирд╛рдо рдПрдХ рд╕рд╛рде рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣рд╛рдВ рд╣рдордиреЗ рдореВрд▓ рдХреЗ DOM рд╕рдВрд░рдЪрдирд╛ рд╕реЗ рдереЛрдбрд╝рд╛ рдЖрдЧреЗ рдмрдврд╝рдХрд░ рд╕реАрдПрд╕рдПрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рдЧрдПред рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕ рдкрд░ рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рд▓реМрдЯреЗрдВрдЧреЗред

13. рдкреВрд░реНрдг рдФрд░ рд╕рдХреНрд░рд┐рдп рдорд╛рдорд▓реЛрдВ рдХреЗ рдХрд╛рдЙрдВрдЯрд░ред


рдкреВрд░реНрдг рдФрд░ рд╕рдХреНрд░рд┐рдп рдорд╛рдорд▓реЛрдВ рдХреЗ рдХрд╛рдЙрдВрдЯрд░реЛрдВ рдХреЛ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рдЙрдкрдпреБрдХреНрдд рдлрд┐рд▓реНрдЯрд░ рдХреЗ рд╕рд╛рде $todos рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░реЗрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдореА рд╕рд░рдгрд┐рдпреЛрдВ рдХреА рд▓рдВрдмрд╛рдИ рджрд┐рдЦрд╛рдПрдВ

  ,'#footer'.d("$active=($todos @filter`Active):filter $completed=($todos @filter`Completed):filter" ,'#todo-count'.d("! (active $active.length)format") //  length    active ... ,'#clear-completed'.d("! (completed $completed.length)format") ) ... .DICT({ ... active: "{length} items left", completed: "Clear completed items ({length})" }) 


рдЗрд╕ рд░реВрдк рдореЗрдВ, рдХрд╛рдЙрдВрдЯрд░реНрд╕ рдмреВрдЯ рд╕рдордп рдкрд░ рд╕рд╣реА рдорд╛рди рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдорд╛рдорд▓реЛрдВ рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдХреЗ рдмрджрд▓рд╛рд╡реЛрдВ рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВ (рдЬрдм рдкрдВрдЬреЗ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ)ред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЬреИрдХрдбреЙрд╡реНрд╕ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдкрд░, рдкреНрд░рддреНрдпреЗрдХ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдорд╛рдорд▓реЗ рдХреА рд╕реНрдерд┐рддрд┐ рдмрджрд▓ рдЬрд╛рддреА рд╣реИ, $todos рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ - рдПрдХ рд╕рд░рдгреА рддрддреНрд╡ рдХрд╛ рд╕рдВрд╢реЛрдзрди рд╕реНрд╡рдпрдВ рд╕рд░рдгреА рдХрд╛ рд╕рдВрд╢реЛрдзрди рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рдорд╛рдорд▓реЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдВрдХреЗрдд рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдРрд╕рд╛ рд╕рдВрдХреЗрдд рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд░рд╛рдЬреНрдп рдЪрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╣рд░ рдмрд╛рд░ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдкреБрди: рдЧрд┐рдирддреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕реЗ $recount редрд╣рдо рдбреА-рдирд┐рдпрдо рдореЗрдВ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкреВрд░реНрд╡рдЬ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░реЗрдВрдЧреЗ, рд╣рдо рдЗрд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВрдЧреЗ рдЬрдм рд╣рдо рдбреЙрд╡реНрд╕ рдкрд░ рдХреНрд▓рд┐рдХ #footerрдХрд░реЗрдВрдЧреЗ , рдФрд░ рд╣рдо рддрддреНрд╡ рдХреЛ рдЙрдкрднреЛрдХреНрддрд╛ рдмрдирд╛ рджреЗрдВрдЧреЗ - рдЗрд╕рдХреЗ рд▓рд┐рдП, рдЗрд╕рдХреЗ рдЪрд░ рдирд┐рдпрдо рдореЗрдВ рдЗрд╕ рд╡реЗрд░рд┐рдПрдмрд▓ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░реЗрдВ

 '#todoapp'.d("$todos= $filter= $recount=" //  $recount     ... ,'INPUT.toggle type=checkbox' .d("#.checked=.completed") .ui("$patch=(.completed=$completed=#.checked) $recount=()") //  $recount    ... ,'#footer'.d("$active=($todos @filter`Active):filter $completed=($todos @filter`Completed):filter $recount" //  $recount 


рдЕрдм рд╕рдм рдХреБрдЫ рдЙрд╕реА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕реЗ рдЗрд╕реЗ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХрд╛рдЙрдВрдЯрд░реЛрдВ рдХреЛ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

14. рд╕рднреА рдкреВрд░реНрдг рдорд╛рдорд▓реЛрдВ рдХрд╛ рд╡рд┐рд▓реЛрдкрдиред


рдЯреЛрдбреЛ рдПрдорд╡реАрд╕реА рдореЗрдВ рдорд╛рдорд▓реЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЛ рдмреИрдЪ рдЕрдиреБрд░реЛрдз рдХреЗ рд░реВрдк рдореЗрдВ рдЧреИрд░-рдХреЛрд╖реЗрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдХрдИ рдЕрдиреБрд░реЛрдзреЛрдВ рджреНрд╡рд╛рд░рд╛ред рдареАрдХ рд╣реИ, рдЪрд▓реЛ рдПрдХ рдЖрд╣ рд▓реЗ рд▓реЛ, рд╣рдорд╛рд░реЗ рд╣рд╛рде рд╕рд┐рдХреЛрдбрд╝реЗрдВ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдкреВрд░реНрдг рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП DELETE- рдЕрдиреБрд░реЛрдз рджреНрд╡рд╛рд░рд╛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ - рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдпрд╣ рд╕рдм рд╣реИ $completedред рддрджрдиреБрд╕рд╛рд░, $todosрдкреВрд░реНрдг рдорд╛рдорд▓реЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреНрдпрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП$active

  ,'#clear-completed' .d("! (completed $completed.length)format") .ui("$todos=$active; *@ $completed; (@method`DELETE .url:dehttp):query") 


рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ : рд╣рдо рдХреБрдЫ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдорд╛рдорд▓реЗ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдкрдВрдЬреЗ рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╣рдЯрд╛рддреЗ рд╣реИрдВред рдиреЗрдЯрд╡рд░реНрдХ рдЯреИрдм рдмреИрдЪ рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЖрддрдВрдХ рджрд┐рдЦрд╛рдПрдЧрд╛ред

15. рдкрддрд╛ рдмрд╛рд░ рдореЗрдВ рд╕реНрдерд┐рддрд┐


рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЗ рдЪрдпрди рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВред рдореВрд▓ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдЪрдпрдирд┐рдд рдлрд╝рд┐рд▓реНрдЯрд░ # рдХреЗ рдмрд╛рдж рдПрдбреНрд░реЗрд╕ рдмрд╛рд░ рдореЗрдВ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдЬрдм рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдпрд╛ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХреЗ рджреМрд░рд╛рди рдкрддрд╛ рдмрд╛рд░ рдореЗрдВ # -рдЧреНрд░реАрдореЗрдВрдЯ рдмрджрд▓ рд░рд╣рд╛ рд╣реИ, рддреЛ рдЪрдпрдирд┐рдд рдлрд╝рд┐рд▓реНрдЯрд░ рднреА рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рд╣реА рдЪрдпрдирд┐рдд рдЯреВ-рдбреВ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЗ рд╕рд╛рде URL рджреНрд╡рд╛рд░рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреГрд╖реНрда рдкрд░ рдЬрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдЖрдк рдПрдХ location.hashрдСрдкрд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ urlhash, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рддрддреНрд╡ рдХреЗ рдирд┐рдпрдо #todoapp(рдпрд╛ рдЙрд╕рдХреЗ рдХрд┐рд╕реА рд╡рдВрд╢рдЬ) рдореЗрдВ, рдЬрд┐рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЕрдкрдбреЗрдЯ рдХреЗ рд╕рд╛рде рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛$filter

 .a("urlhash $filter") 


рдФрд░ рдЖрдк $filterрдкрддрд╛ рдмрд╛рд░ рд╕реЗ рдПрдХ рдорд╛рди рдХреЗ рд╕рд╛рде рдЪрд░ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ (# рдХреЗ рдмрд┐рдирд╛) рджреЗрдиреЗ рд╡рд╛рд▓реЗ рдЫрджреНрдо-рдХрдирд╡рд░реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣реИрд╢рдЪреЗрдВрдЬ рдШрдЯрдирд╛ рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред:urlhashlocation.hash

 .d("$todos= $filter=:urlhash $recount=" .e("hashchange","$filter=:urlhash") 


рд╣реИрд╢рдЪреЗрдВрдЬ рдШрдЯрдирд╛ рдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рджреНрд╡рд╛рд░рд╛ рдЙрдард╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдкрддрд╛ рдмрд╛рд░ рдореЗрдВ # -agagment рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХрд┐рд╕реА рдХрд╛рд░рдг рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ window, рдФрд░ document.bodyрдЗрд╕ рдШрдЯрдирд╛ рдХреЛ рд╕реБрди рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдШрдЯрдирд╛ рдХреЛ рдПрдХ рддрддреНрд╡ рд╕реЗ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП #todoapp, рдЖрдкрдХреЛ рдПрдХ рдСрдкрд░реЗрдЯрд░ рдХреЛ рдЙрд╕рдХреЗ рдбреА-рдирд┐рдпрдо рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ listenрдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд░рд┐рд▓реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрддреНрд╡ рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░рддрд╛ рд╣реИредwindow

 '#todoapp' .a("urlhash $filter") .e("hashchange","$filter=:urlhash") .d("$todos= $filter=:urlhash $recount=; listen @hashchange" 


рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ : рд╕реНрд╡рд┐рдЪ рдмрд╛рд░, рдкрддрд╛ рдмрд╛рд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдЯреНрд░реИрдХ рдХрд░реЗрдВ , #Active , #All , #Completed рдХреЗ рд╕рд╛рде рд▓рд┐рдВрдХ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ ред рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╡рд╛рдкрд╕ рдореВрд▓ рдореЗрдВред рд╡рд╣рд╛рдБ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ, рдлрд┐рд▓реНрдЯрд░ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - рд▓рд┐рдВрдХ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗред рдпрджреНрдпрдкрд┐ рдмрд╣реБрдд рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдирд╣реАрдВ рд╣реИ, рд╣рдо рдкреВрд░реНрдгрддрд╛ рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рд╣реА рдХрд░реЗрдВрдЧреЗред

  ,'UL#filters'.d("* filter" ,'LI'.d("" ,'A'.d("!! (`# .filter)concat@href .filter@") ) ) 


, !? , CSS- selected , .filter $filter

  ,'A'.d("!! (`# .filter)concat@href .filter@; !? (.filter $filter)eq@selected") 


dap- ( ) , .

16.


, , head HTML-

  [ui=click]{cursor:pointer} 


рддреЛ рдХрдо рд╕реЗ рдХрдо рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдЖрдк рдХрд╣рд╛рдВ рдХреНрд▓рд┐рдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЕрд░реЗ рд╣рд╛рдБ! рдпрд╣ рдмрдбрд╝реЗ рдЕрдХреНрд╖рд░реЛрдВ рдореЗрдВ "рдЯреЙрдбреЛрд╕" рд╢рдмреНрдж рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣рд╛рдБ рдореИрдВ, рд╢рд╛рдпрдж, рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдЕрдВрддрддрдГ рдПрдХ рдЫреЛрдЯреА рдХрд▓реНрдкрдирд╛ рдФрд░ рд░рдЪрдирд╛рддреНрдордХрддрд╛ рджрд┐рдЦрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреВрдВрдЧрд╛, рдФрд░ рд╕рд┐рд░реНрдл "рдЯреЙрдб" рдХреЗ рдмрдЬрд╛рдп рдореИрдВ "рдбреАрдПрдкреА рдЯреЙрдбреЛрд╕" рд▓рд┐рдЦреВрдВрдЧрд╛

  ,'H1'.d("","dap todos") 


рд╡рд╛рд╣ред рдЕрдм рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЛ рдкреВрд░реНрдг рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЖрдпреЛрдЬрд┐рдд рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ (рдпрджрд┐ рдЖрдк рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдЗрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдкрдврд╝рддреЗ рд╣реИрдВ)ред

рдирд┐рд╖реНрдХрд░реНрд╖ рдореЗрдВ


рд╢рд╛рдпрдж, рдкрдврд╝рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рдпрд╣ рдЖрднрд╛рд╕ рд╣реЛ рдЧрдпрд╛ рдХрд┐ рдкрд░реАрдХреНрд╖рдг рдФрд░ рддреНрд░реБрдЯрд┐ рджреНрд╡рд╛рд░рд╛ рдбреАрдПрдкреА-рдХрд╛рд░реНрдпрдХреНрд░рдо рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ - рдпреЗ рд╕рднреА "рдЪрд▓реЛ рджреЗрдЦрддреЗ рд╣реИрдВ рдХреНрдпрд╛ рд╣реБрдЖ", "рдпрд╣ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдЕрддрд┐ рд╕реВрдХреНрд╖реНрдо рдЕрдВрддрд░ рд╣реИ", рдЖрджрд┐ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИредрдХреЛрдб рд▓рд┐рдЦрддреЗ рд╕рдордп рдпреЗ рд╕рднреА рдмрд╛рд░реАрдХрд┐рдпрд╛рдВ рдХрд╛рдлреА рд╕реНрдкрд╖реНрдЯ рдФрд░ рдЕрдиреБрдорд╛рдирд┐рдд рд╣реИрдВред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдЗрди рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдпрд╣ рджрд┐рдЦрд╛рдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ рдХрд┐ рдпрд╣ рдпрд╛ рд╡рд╣ рдирд┐рд░реНрдгрдп рдирд┐рдпрдореЛрдВ рдореЗрдВ рдореМрдЬреВрдж рд╣реИ рдФрд░ рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЕрдиреНрдпрдерд╛ рдирд╣реАрдВред

рдкреВрдЫреЛ, рдЬреИрд╕рд╛ рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ, рд╕рд╡рд╛рд▓ред

Source: https://habr.com/ru/post/hi481680/


All Articles