рдпрд╣ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХрд╛ рджреВрд╕рд░рд╛, рдЕрдВрддрд┐рдо, рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдиреНрдпреВрдирддрдо рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓
рдбреАрдПрд╕ рдЬреЗрдПрд╕ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯреЛрдбреЛрдПрдорд╡реАрд╕реА рдХреНрд▓рд╛рдЗрдВрдЯ рд▓рд┐рдЦрддреЗ рд╣реИрдВред
рдкрд╣рд▓реЗ рднрд╛рдЧ рдХрд╛ рд╕рд╛рд░рд╛рдВрд╢: рд╣рдореЗрдВ 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!"
рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рд▓реЗрдХрд┐рди рдпрд╣ рдзреЛрдЦрд╛ рд╣реЛрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд▓рд╛рдЗрди рдХреЗ рдиреАрдЪреЗ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рдХреНрд░рд┐рдп рдФрд░ рдкреВрд░реНрдг рдорд╛рдорд▓реЛрдВ рдХреЗ рдлрд╝рд┐рд▓реНрдЯрд░ рдФрд░ рдХрд╛рдЙрдВрдЯрд░ рд╣реЛрдВрдЧреЗ (рдЬреЛ
#footer
)ред рдЗрд╕рд▓рд┐рдП, рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ, "рд╢рд╛рд░реАрд░рд┐рдХ рд░реВрдк рд╕реЗ" рд╕реВрдЪреА рд╕реЗ рд╡рд╕реНрддреБ рдХреЛ рддреБрд░рдВрдд рд╣рдЯрд╛ рджреЗрдирд╛ рдмреЗрд╣рддрд░ рд╣реИред рдпрд╣реА рд╣реИ, рд╣рдореЗрдВ рд╕рд░рдгреА рдХреЛ рд╕реНрд╡рдпрдВ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ рд╣рдореЗрдВ рд╢реБрд░реВ рдореЗрдВ рд╕рд░реНрд╡рд░ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реБрдЖ рдерд╛ - рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЗрд╕ рд╕рд░рдгреА рдХреЛ рднреА рдПрдХ рд░рд╛рдЬреНрдп рдЪрд░ рдмрдирдирд╛ рдЪрд╛рд╣рд┐рдПред рдЪрд▓реЛ рдЙрд╕реЗ
$todos
ред
$todos
рдЪрд░ рдХрд╛ рджрд╛рдпрд░рд╛ рдЙрди рд╕рднреА рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдкреВрд░реНрд╡рдЬ рдХрд╛ рдЪрдпрди рдХрд░рдирд╛ рд╣реИ рдЬреЛ рдЗрд╕ рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдФрд░ рдЗрд╕реЗ
#header
INPUT#new-todo
, рдФрд░
#footer
рдХрд╛рдЙрдВрдЯрд░реНрд╕, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ
UL#todo-list
рджреНрд╡рд╛рд░рд╛ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЙрди рд╕рднреА рдХрд╛ рд╕рд╛рдорд╛рдиреНрдп рдкреВрд░реНрд╡рдЬ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдореВрд▓ рддрддреНрд╡ рд╣реИ,
#todoapp
ред рдЗрд╕рд▓рд┐рдП, рдЗрд╕рдХреЗ рдбреА-рдирд┐рдпрдо рдореЗрдВ рд╣рдо рдЪрд░
$todos
рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВрдЧреЗред рдЙрд╕реА рдЬрдЧрд╣ рдкрд░, рд╣рдо рддреБрд░рдВрдд рд╕рд░реНрд╡рд░ рд╕реЗ рдбреЗрдЯрд╛ рдЕрдкрд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВред рдФрд░
UL#todo-list
рд▓рд┐рд╕реНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдм рд╣рдо рднреА рдЗрд╕рд╕реЗ рд╣реЛрдВрдЧреЗ:
'#todoapp'.d("$todos=todos:query"
рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдпрджрд┐ рдкрд░реАрдХреНрд╖рдг рдХреЗ рджреМрд░рд╛рди рдЕрдЪрд╛рдирдХ рдЯреВ-рдбреВ рд╕реВрдЪреА рд▓реЛрдб рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ - рдпрд╣ рдмрд╣реБрдд рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдиреЗ рдЙрди рд╕рднреА рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ (рдпрд╣ рдПрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рд░реНрд╡рд░ рд╣реИ, рдФрд░ рд╡рд╣рд╛рдВ рдХреБрдЫ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)ред
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреГрдкрдпрд╛
рдкреВрд░реНрдг-рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рд╡рд╛рд▓реЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдорд╛рдорд▓реЗ рдмрдирд╛рдПрдВред
рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ ред рдпрд╣рд╛рдБ
#todoapp
рддрддреНрд╡ рдХреЗ рдирд┐рдпрдо рдореЗрдВ
$todos
рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рдХреЗ
рд╕рд╛рде рддреБрд░рдВрдд
рдЖрд░рдореНрдн рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рдиреЗ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдЕрдкреНрд░рд┐рдп рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕рд╛рдордиреЗ рдЖрдИ рд╣реИред рдпрджрд┐ рд╕рд░реНрд╡рд░ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЕрдиреБрд░реЛрдз рдХрд╛ рдЬрд╡рд╛рдм рджреЗрддрд╛ рд╣реИ (Chrome рдЖрдкрдХреЛ рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ: рдбреЗрд╡рд▓рдкрд░ рдЯреВрд▓ рдХреЗ рдиреЗрдЯрд╡рд░реНрдХ рдЯреИрдм рдкрд░, рдЖрдк рдзреАрдореЗ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рдЕрдиреБрдХрд░рдг рдХреЗ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЗ рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ), рддреЛ рдЬрдм рддрдХ рдЕрдиреБрд░реЛрдз рдкреВрд░рд╛ рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рддрдм рддрдХ рд╣рдорд╛рд░рд╛ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдереЛрдбрд╝рд╛ рдЙрджрд╛рд╕ рджрд┐рдЦрддрд╛ рд╣реИ - рд▓реЗрдХрд┐рди рд╕реАрдПрд╕рдПрд╕ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВред рдРрд╕реА рддрд╕реНрд╡реАрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЗрдВ рдЙрддреНрд╕рд╛рд╣ рдирд╣реАрдВ рдЬреЛрдбрд╝реЗрдЧреАред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдкрд┐рдЫрд▓рд╛ рд╕рдВрд╕реНрдХрд░рдг рдЗрд╕рд╕реЗ рдЧреНрд░рд╕реНрдд рдирд╣реАрдВ рдерд╛ - рдЬрдм рддрдХ рдХрд┐ рдкреЗрдЬ рдкрд░ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рд╣реБрдЖ рдерд╛, рддрдм рддрдХ рдХреЗрд╡рд▓ рд╕реВрдЪреА рд╣реА рдЧрд╛рдпрдм рдереА, рд▓реЗрдХрд┐рди рдЕрдиреНрдп рддрддреНрд╡ рддреБрд░рдВрдд рджрд┐рдЦрд╛рдИ рджрд┐рдП, рдбреЗрдЯрд╛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд┐рдП рдмрд┐рдирд╛ред
рдпреЗ рд░рд╣реА рдмрд╛рддред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдХреЛ рдпрд╛рдж рд╣реИ,
:query
рдХрдирд╡рд░реНрдЯрд░ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╣реИред рдпрд╣ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЗрд╕ рддрдереНрдп рдореЗрдВ рд╡реНрдпрдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЬрдм рддрдХ рдЕрдиреБрд░реЛрдз рдкреВрд░рд╛ рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рд╡рд░реНрддрдорд╛рди рдирд┐рдпрдо рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рдЕрд╡рд░реБрджреНрдз рд╣реЛрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд, рддрддреНрд╡ рдХреА рдкреАрдврд╝реА, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЕрдиреБрд░реЛрдзрд┐рдд рдбреЗрдЯрд╛ (рдЬреЛ рддрд╛рд░реНрдХрд┐рдХ рд╣реИ) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЕрдиреНрдп рддрддреНрд╡реЛрдВ рдХреА рдкреАрдврд╝реА рдЕрд╡рд░реБрджреНрдз рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЬрдм
UL#todo-list
рдиреЗ рд╕рд░реНрд╡рд░ рддрдХ рдкрд╣реБрдВрдЪ
UL#todo-list
, рддреЛ рдХреЗрд╡рд▓ рдЗрд╕реЗ рдЕрд╡рд░реБрджреНрдз рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди
#header
рдирд╣реАрдВ рдФрд░
#footer
, рдЬреЛ рддреБрд░рдВрдд рдЦреАрдВрдЪрд╛ рдЧрдпрд╛ рдерд╛ред рдЕрдм рдкреВрд░рд╛
#todoapp
рдЕрдиреБрд░реЛрдз рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реИред
9. рдбреЗрдЯрд╛ рд▓реЛрдбрд┐рдВрдЧ рдореЗрдВ рджреЗрд░реА
рд╕реНрдерд┐рддрд┐ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдФрд░ рдЕрд╕рдорд╛рди рддрддреНрд╡реЛрдВ рдХреЛ рд░реЛрдХрдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдбреЗрдЯрд╛ рдХреЗ рд╢реБрд░реБрдЖрддреА рд▓реЛрдбрд┐рдВрдЧ рдХреЛ рд╕реНрдердЧрд┐рдд рдХрд░ рджреЗрдВрдЧреЗ, рдЬрдм рддрдХ рдХрд┐ рд╕рдм рдХреБрдЫ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рддреИрдпрд╛рд░ рди рд╣реЛ рдЬрд╛рдПред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рддреБрд░рдВрдд рдбреЗрдЯрд╛ рдХреЛ
$todos
рд╡реИрд░рд┐рдПрдмрд▓ рдореЗрдВ рд▓реЛрдб рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рд╣рдо рдЗрд╕реЗ "рдХреБрдЫ рднреА рдирд╣реАрдВ" рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ
'#todoapp'.d("$todos="
рдЗрд╕рд▓рд┐рдП рд╡рд╣ рдХреБрдЫ рднреА рдмреНрд▓реЙрдХ рдирд╣реАрдВ рдХрд░реЗрдЧреА рдФрд░ рдкреВрд░рд╛ рдЦрд╛рдХрд╛ рддреИрдпрд╛рд░ рд╣реЛ рдЬрд╛рдПрдЧрд╛ - рднрд▓реЗ рд╣реА рдЦрд╛рд▓реА "рдЯреВ-рдбреВ рд▓рд┐рд╕реНрдЯ" рдХреЗ рд╕рд╛рдеред рд▓реЗрдХрд┐рди рдЕрдм, рдПрдХ рдЙрдмрд╛рдК рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдХреНрд░реАрди рдХреЗ рд╕рд╛рде, рдЖрдк рдПрдХ рдЯреВ-рдбреВ рд╕реВрдЪреА рдХреЛ рдЕрдкрд▓реЛрдб рдХрд░рдХреЗ
$todos
рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ
рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рд╡рдВрд╢ рдХреЛ
#todoapp
рдЬреЛрдбрд╝реЗрдВ
,'loader' .u("$todos=todos:query")
рдЗрд╕ рддрддреНрд╡ рдХрд╛ рдПрдХ рдпреВ-рдирд┐рдпрдо рд╣реИ рдЬреЛ рдЕрд╡рд░реБрджреНрдз рдирд┐рдпрдо рдХреЗ рдмрд┐рд▓реНрдХреБрд▓ рд╕рдорд╛рди рджрд┐рдЦрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдПрдХ рдореМрд▓рд┐рдХ рдЕрдВрддрд░ рд╣реИред
рдореИрдВ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдбреА-рдирд┐рдпрдо (
рдиреАрдЪреЗ рд╕реЗ ) рддрддреНрд╡ рдкреАрдврд╝реА рдирд┐рдпрдо рд╣реИ рдЬрд┐рд╕реЗ рддрдм рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдЯреЗрдореНрдкрд▓реЗрдЯ рдКрдкрд░ рд╕реЗ
рдиреАрдЪреЗ рддрдХ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдорд╛рддрд╛-рдкрд┐рддрд╛ рд╕реЗ рд╡рдВрд╢рдЬ рддрдХ; рдФрд░ рдпреВ-рдирд┐рдпрдо (
рдКрдкрд░ рд╕реЗ ) рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдирд┐рдпрдо рд╣реИрдВ рдЬреЛ рдПрдХ рдРрд╕реА рдШрдЯрдирд╛ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдиреАрдЪреЗ рд╕реЗ
рдКрдкрд░ рддрдХ , рдмрдЪреНрдЪреЗ рд╕реЗ рдорд╛рддрд╛-рдкрд┐рддрд╛ рддрдХ рдкреЙрдк рд╣реЛрддреЗ рд╣реИрдВред
рддреЛ, рдЕрдЧрд░ рдХреБрдЫ ("рдХреБрдЫ рднреА рдирд╣реАрдВ" рд╕рд╣рд┐рдд)
рдбреА-рдирд┐рдпрдо рдореЗрдВ рдПрдХ рдЪрд░
рдХреЛ рд╕реМрдВрдкрд╛
рдЧрдпрд╛ рд╣реИ , рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЗрд╕ рддрддреНрд╡ рдХреЗ рджрд╛рдпрд░реЗ рдореЗрдВ рдЗрд╕рдХреА
рдШреЛрд╖рдгрд╛ рдФрд░ рдЖрд░рдВрднреАрдХрд░рдг рдФрд░ рдЗрд╕рдХреЗ рд╡рдВрд╢рдЬ (рдиреЗрд╕реНрдЯреЗрдб рдЧреБрдВрдЬрд╛рдЗрд╢ рдХреЛ рдбреАрдПрдкреА рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдЬреЗрдПрд╕ рдореЗрдВ рд╣реИред )ред
рдЕрдк-рдирд┐рдпрдореЛрдВ рдореЗрдВ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ
рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдкрд╣рд▓реЗ рд╕реНрдХреЛрдк рдореЗрдВ рдШреЛрд╖рд┐рдд рдЪрд░
рдХрд╛ рд╕рдВрд╢реЛрдзрди ред рдбреА-рдирд┐рдпрдо рдореЗрдВ рдЪрд░реЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдФрд░ рдЖрд░рдВрднрди рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЛ рд╡рдВрд╢рдЬреЛрдВ рдХреЛ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдиреАрдЪреЗ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдФрд░ рд╕рдВрд╢реЛрдзрди рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЛ рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдЕрдкрдбреЗрдЯ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЙрди рд╕рднреА рддрддреНрд╡реЛрдВ рдХрд╛ рдПрдХ рдЙрдкрдпреБрдХреНрдд рдкреБрдирд░реНрдЧрдарди рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВред
loader
рддрддреНрд╡, рдЕрдкрдиреЗ рдпреВ-рдирд┐рдпрдо рдореЗрдВ
#todoapp
рд╡рдВрд╢рдЬ рд╣реЛрдиреЗ рдХреЗ
#todoapp
,
$todos
рдЪрд░
рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ , рдЗрд╕рдореЗрдВ рд╕рд░реНрд╡рд░ рд╕реЗ рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕ рдЪрд░ рдХреЗ рд╕рднреА рдЙрдкрднреЛрдХреНрддрд╛ рддрддреНрд╡реЛрдВ рдХреЗ рд╕реНрд╡рдд: рдЙрддреНрдерд╛рди рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ (рдФрд░ рдХреЗрд╡рд▓ рдЙрдиреНрд╣реЗрдВ, рдЬреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ!)ред рдПрдХ рдЪрд░ рдХреЗ рдЙрдкрднреЛрдХреНрддрд╛ рдРрд╕реЗ рддрддреНрд╡ рд╣реИрдВ рдЬрд┐рдирдХреЗ рдбреА-рдирд┐рдпрдореЛрдВ рдореЗрдВ рдПрдХ рдЪрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╣ рдЪрд░ рд╣реЛрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддред рдЬреЛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╕рдордп рдЗрд╕ рдЪрд░ (рдЦрд╛рддреЗ рдореЗрдВ рдЧреБрдВрдЬрд╛рдЗрд╢ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП) рдХреЛ
рдкрдврд╝рддреЗ рд╣реИрдВ ред
рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕
$todos
рд╡реИрд░рд┐рдПрдмрд▓ рдХрд╛ рдПрдХ рдЙрдкрднреЛрдХреНрддрд╛ рд╣реИ - рдмрд╣реБрдд
UL#todo-list
, рдЬреЛ, рддрджрдиреБрд╕рд╛рд░, рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
,'UL#todo-list'.d("*@ $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?\:/,''),
рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕рд╣реА рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдХреЛрдИ рд░реЛрдХ рдирд╣реАрдВ рд╣реИред
.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 ),
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
рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЕрдЧрд▓рд╛ рдХрджрдо, рд╣рдо рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рдореИрдВ рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдПрдХ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдмрд┐рдВрджреБ рдХреА рдУрд░ рдореЛрдбрд╝реВрдВрдЧрд╛ред рдпрджрд┐ рд╣рдо
рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдереЛрдбрд╝рд╛ рдкреАрдЫреЗ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдзреНрдпрд╛рди рджреЗрддреЗ рд╣реИрдВ: рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрдиреБрд░реЛрдз рднреА рд╣реИ, рдирдпрд╛ рдорд╛рдорд▓рд╛ рддреБрд░рдиреНрдд рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдмрд┐рдирд╛ рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд┐рдП
рдпрд╣ рдбреИрдк рдореЗрдВ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХрдиреНрд╡рд░реНрдЯрд░реНрд╕ рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдПрдХ рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ: рдпрджрд┐ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХрдирд╡рд░реНрдЯрд░ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЕрд░реНрдерд╛рдд, рдЗрд╕реЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИ), рддреЛ рдЖрдк рдЗрд╕рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ - рдФрд░ рдирд┐рдпрдо рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рдЕрд╡рд░реБрджреНрдз рдирд╣реАрдВ рд╣реИред рдпрд╣ рдЕрдХреНрд╕рд░ рдЙрдкрдпреЛрдЧреА рд╣реЛрддрд╛ рд╣реИ: рдЖрдкрдиреЗ рджреЗрдЦрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рд╕реВрдЪреА рд╕реЗ рдорд╛рдорд▓реЛрдВ рдХреЛ рд╣рдЯрд╛рддреЗ рд╕рдордп, рд╡реЗ 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=()")
рдпрд╣рд╛рдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдорд╛рдорд▓реЗ рдХрд╛ рдбреЗрдЯрд╛ рд╕рдВрджрд░реНрдн рдХреЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реА рд╣реИ, рдЬреЛ
$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="
рд╣рдо рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ ред рдлрд┐рд▓реНрдЯрд░ рдареАрдХ рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдореЗрдВ рдПрдХ рдмрд╛рд░реАрдХрд┐рдпрд╛рдВ рд╣реИ рдХрд┐ рдлрд┐рд▓реНрдЯрд░ рдХреЗ рдирд╛рдо рдПрдХ рд╕рд╛рде рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣рд╛рдВ рд╣рдордиреЗ рдореВрд▓ рдХреЗ DOM рд╕рдВрд░рдЪрдирд╛ рд╕реЗ рдереЛрдбрд╝рд╛ рдЖрдЧреЗ рдмрдврд╝рдХрд░ рд╕реАрдПрд╕рдПрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рдЧрдПред рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕ рдкрд░ рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рд▓реМрдЯреЗрдВрдЧреЗред
13. рдкреВрд░реНрдг рдФрд░ рд╕рдХреНрд░рд┐рдп рдорд╛рдорд▓реЛрдВ рдХреЗ рдХрд╛рдЙрдВрдЯрд░ред
рдкреВрд░реНрдг рдФрд░ рд╕рдХреНрд░рд┐рдп рдорд╛рдорд▓реЛрдВ рдХреЗ рдХрд╛рдЙрдВрдЯрд░реЛрдВ рдХреЛ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рдЙрдкрдпреБрдХреНрдд рдлрд┐рд▓реНрдЯрд░ рдХреЗ рд╕рд╛рде
$todos
рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░реЗрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдореА рд╕рд░рдгрд┐рдпреЛрдВ рдХреА рд▓рдВрдмрд╛рдИ рджрд┐рдЦрд╛рдПрдВ
,'#footer'.d("$active=($todos @filter`Active):filter $completed=($todos @filter`Completed):filter" ,'#todo-count'.d("! (active $active.length)format")
рдЗрд╕ рд░реВрдк рдореЗрдВ, рдХрд╛рдЙрдВрдЯрд░реНрд╕ рдмреВрдЯ рд╕рдордп рдкрд░ рд╕рд╣реА рдорд╛рди рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдорд╛рдорд▓реЛрдВ рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдХреЗ рдмрджрд▓рд╛рд╡реЛрдВ рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВ (рдЬрдм рдкрдВрдЬреЗ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ)ред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЬреИрдХрдбреЙрд╡реНрд╕ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдкрд░, рдкреНрд░рддреНрдпреЗрдХ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдорд╛рдорд▓реЗ рдХреА рд╕реНрдерд┐рддрд┐ рдмрджрд▓ рдЬрд╛рддреА рд╣реИ,
$todos
рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ - рдПрдХ рд╕рд░рдгреА рддрддреНрд╡ рдХрд╛ рд╕рдВрд╢реЛрдзрди рд╕реНрд╡рдпрдВ рд╕рд░рдгреА рдХрд╛ рд╕рдВрд╢реЛрдзрди рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рдорд╛рдорд▓реЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдВрдХреЗрдд рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдРрд╕рд╛ рд╕рдВрдХреЗрдд рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд░рд╛рдЬреНрдп рдЪрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╣рд░ рдмрд╛рд░ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдкреБрди: рдЧрд┐рдирддреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕реЗ
$recount
ред
рд╣рдо рдбреА-рдирд┐рдпрдо рдореЗрдВ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкреВрд░реНрд╡рдЬ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░реЗрдВрдЧреЗ, рд╣рдо рдЗрд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВрдЧреЗ рдЬрдм рд╣рдо рдбреЙрд╡реНрд╕ рдкрд░ рдХреНрд▓рд┐рдХ #footer
рдХрд░реЗрдВрдЧреЗ , рдФрд░ рд╣рдо рддрддреНрд╡ рдХреЛ рдЙрдкрднреЛрдХреНрддрд╛ рдмрдирд╛ рджреЗрдВрдЧреЗ - рдЗрд╕рдХреЗ рд▓рд┐рдП, рдЗрд╕рдХреЗ рдЪрд░ рдирд┐рдпрдо рдореЗрдВ рдЗрд╕ рд╡реЗрд░рд┐рдПрдмрд▓ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░реЗрдВ '#todoapp'.d("$todos= $filter= $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
рдкрддрд╛ рдмрд╛рд░ рд╕реЗ рдПрдХ рдорд╛рди рдХреЗ рд╕рд╛рде рдЪрд░ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ (# рдХреЗ рдмрд┐рдирд╛) рджреЗрдиреЗ рд╡рд╛рд▓реЗ рдЫрджреНрдо-рдХрдирд╡рд░реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣реИрд╢рдЪреЗрдВрдЬ рдШрдЯрдирд╛ рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред:urlhash
location.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")
рд╡рд╛рд╣ред рдЕрдм рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЛ рдкреВрд░реНрдг рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЖрдпреЛрдЬрд┐рдд рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ (рдпрджрд┐ рдЖрдк рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдЗрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдкрдврд╝рддреЗ рд╣реИрдВ)редрдирд┐рд╖реНрдХрд░реНрд╖ рдореЗрдВ
рд╢рд╛рдпрдж, рдкрдврд╝рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рдпрд╣ рдЖрднрд╛рд╕ рд╣реЛ рдЧрдпрд╛ рдХрд┐ рдкрд░реАрдХреНрд╖рдг рдФрд░ рддреНрд░реБрдЯрд┐ рджреНрд╡рд╛рд░рд╛ рдбреАрдПрдкреА-рдХрд╛рд░реНрдпрдХреНрд░рдо рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ - рдпреЗ рд╕рднреА "рдЪрд▓реЛ рджреЗрдЦрддреЗ рд╣реИрдВ рдХреНрдпрд╛ рд╣реБрдЖ", "рдпрд╣ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдЕрддрд┐ рд╕реВрдХреНрд╖реНрдо рдЕрдВрддрд░ рд╣реИ", рдЖрджрд┐ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред
рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╕рдордп рдпреЗ рд╕рднреА рдмрд╛рд░реАрдХрд┐рдпрд╛рдВ рдХрд╛рдлреА рд╕реНрдкрд╖реНрдЯ рдФрд░ рдЕрдиреБрдорд╛рдирд┐рдд рд╣реИрдВред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдЗрди рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдпрд╣ рджрд┐рдЦрд╛рдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ рдХрд┐ рдпрд╣ рдпрд╛ рд╡рд╣ рдирд┐рд░реНрдгрдп рдирд┐рдпрдореЛрдВ рдореЗрдВ рдореМрдЬреВрдж рд╣реИ рдФрд░ рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЕрдиреНрдпрдерд╛ рдирд╣реАрдВредрдкреВрдЫреЛ, рдЬреИрд╕рд╛ рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ, рд╕рд╡рд╛рд▓ред