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

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

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

рдкрд┐рдЫрд▓реЗ рддрддреНрд╡ рдХреЛ "рдШрдЯрдирд╛" рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА "рд╕рдВрдмрдВрдзрд┐рддрдЯрд╛рд░реНрдЧреЗрдЯ" рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрднрд╡ рд╣реИред рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд╕рдорд╛рдзрд╛рди рдХрд╛ рджреГрд╢реНрдпред
я┐╝

рдФрд░ рдпрд╣рд╛рдБ рдХреЛрдб рд╣реА рд╣реИред рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдХреЛрдИ "рдИрдПрд╕ 6+" рд╕рд┐рдВрдЯреИрдХреНрд╕ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡рд┐рднрд┐рдиреНрди рдмреНрд░рд╛рдЙрдЬрд░ рдХреЗ рд╕рд╛рде рдХреЛрдб рдХреЛ рд╕рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рд╡рд┐рднрд┐рдиреНрди "рдЯреНрд░рд╛рдВрд╕рдкреИрд░рд░реНрд╕" рдХреЛ рдЬреЛрдбрд╝реЗ рдмрд┐рдирд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдмреИрдмреЗрд▓ рдХреЛрд░ рдкрд░ рд╣реИред
function getGateInput(handleTabOut) { var input = document.createElement("input");
рдХреБрдЫ рднреА рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИ: рдПрдХ "рдЗрдирдкреБрдЯ" рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рд╣рдорд╛рд░реЗ "рдЧреЗрдЯреНрд╕" рдХреЛ рдЫрд┐рдкрд╛рддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ, "рдкреНрд░рджрд░реНрд╢рди: рдХреЛрдИ рдирд╣реАрдВ" рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдРрд╕реЗ рддрддреНрд╡реЛрдВ рдкрд░ "рдЯреИрдм" рдХреЗрдВрджреНрд░рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдХрд╛рд░рдг, рддрддреНрд╡ рдХреЛ рдкрд╛рд░рджрд░реНрд╢реА рдмрдирд╛рдирд╛ рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╡рд┐рдВрдбреЛ рд╕реЗ рдмрд╛рд╣рд░ рд▓реЗ рдЬрд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
function getTabOutHandler(element, GATES) { return function(event) { var relatedTarget = event.relatedTarget || event.fromElement; var target = event.target; var gatesTrapped = target === GATES[0] || target === GATES[1]; if (gatesTrapped && isChild(relatedTarget, element)) { event.preventDefault(); relatedTarget.focus(); } }; }
рдкрд┐рдЫрд▓реЗ рдЖрдЗрдЯрдо рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, getTabOutHandler рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдпрд╣
HOC рд╣реИ ред рдЗрд╕рдХрд╛ рдкрд╣рд▓рд╛ рддрд░реНрдХ рд╣реИ рд╣рдорд╛рд░рд╛ рдХрдВрдЯреЗрдирд░ (рдЬрд┐рд╕рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рд╣рдо "рдЧреЗрдЯ" рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ), рдФрд░ рджреВрд╕рд░рд╛ рдпрд╣ "рдЧреЗрдЯреНрд╕" рдХреА рдПрдХ рд╕рд░рдгреА рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдЧреЗрдЯрдЧреЗрдЯрдЗрдирдкреБрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рд╣реИред рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдШрдЯрдирд╛ рд╣реИрдВрдбрд▓рд░ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ "рдЧреЗрдЯ" рдХреЛ рдЦреЛрд▓рдиреЗ рдФрд░ рдмрдВрдж рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдо рдЗрд╕реЗ
"рдЯреИрдмрдЗрдВрдбреЗрдХреНрд╕" рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕реЗрдЯ рдХрд░рдХреЗ рдХрд░реЗрдВрдЧреЗред (-1 - рдЯреИрдмреНрд╕ рдХреЗ рд╕рд╛рде рдлреЛрдХрд╕ рди рдХрд░реЗрдВ, 0 - рд╕реНрдЯреНрд░реАрдо рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдлреЛрдХрд╕ рдХрд░реЗрдВ)
function moveGates(open, GATES) { GATES[0].setAttribute("tabindex", open ? -1 : 0); GATES[1].setAttribute("tabindex", open ? -1 : 0); }
рдлрд╛рдЯрдХреЛрдВ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рд╣реИрдВрдбрд▓рд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдЯреИрдм (рдХреЛрдб 9) рдХреЛ рджрдмрд╛рдиреЗ рдХреЗ рд▓рд┐рдП "рд╕реБрдиреЗрдВрдЧреЗ" рдФрд░ рдпрджрд┐ рдХреЗрдВрджреНрд░рд┐рдд рддрддреНрд╡ (рд╕рдХреНрд░рд┐рдпрдг) рдХрдВрдЯреЗрдирд░ рдХреЗ рдЕрдВрджрд░ рд╣реИ, рддреЛ "рдЧреЗрдЯ" рдХреЛ рдмрдВрдж рдХрд░реЗрдВ, рдЕрдиреНрдпрдерд╛ рдЗрд╕реЗ рдЦреЛрд▓реЗрдВред
window.addEventListener("keydown", function(event) { if (event.keyCode === 9) { if (isChild(document.activeElement, element)) { moveGates(false, GATES); } else { moveGates(true, GATES); } } });
рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░
рдПрдХ рд░реВрдк рдореЗрдВ рдлрд╝реЛрдХрд╕ рд▓реЙрдХ рдХрд░рдиреЗ рдХреА рдПрдХ рд╡рд┐рдзрд┐ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕рдореЗрдВ рдкрд┐рдЫрд▓реЗ рдлрд╝реЛрдХрд╕ рдХрд┐рдП рдЧрдП рддрддреНрд╡ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред рдлреЛрдХрд╕ рдХреЛ "рдкрдХрдбрд╝рдиреЗ" рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдЫрд┐рдкреЗ рд╣реБрдП "рдЗрдирдкреБрдЯ рдПрд▓рд┐рдореЗрдВрдЯреНрд╕" рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛, рдЬрд┐рд╕рдХрд╛ рдлреЛрдХрд╕
"рдЯреИрдмрдЗрдВрдбреЗрдХреНрд╕" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдЙрд╕
рдЯреИрдм-рдЖрдЙрдЯ-рдХреИрдЪрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдЕрдкрдиреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдерд╛ред рдЙрдкрдпреЛрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдпрд╣рд╛рдВ рджреЗрдЦреЗ рдЬрд╛ рд╕рдХрддреЗ
рд╣реИрдВ ред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ
рд╕рдорд╛рдзрд╛рди рднреА рд╣реИред