рдкреНрд░рдЬрдирди рдХрд░рдирд╛ :
рдХреГрдкрдпрд╛ рд╕рдлрд╛рд░реА рдпрд╛ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ (рд╢рд╛рдпрдж рдЖрдИрдИ) рдкрд░ рдЙрджрд╛рд╣рд░рдг рдкреГрд╖реНрда рдЦреЛрд▓реЗрдВ: https://gaearon.github.io/react-dnd/examples-sortable-simple.html
рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрд╛ рдЖрдХрд╛рд░ рдмрджрд▓реЗрдВ рд╕реНрдХреНрд░реАрди рдХреЗ рдмрд╛рд╣рд░ рд╕реВрдЪреА рдХреЗ рдХреБрдЫ рддрддреНрд╡реЛрдВ рдХреЛ рд░рдЦреЗрдВ, рдлрд┐рд░ рдЦреАрдВрдЪрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ, рдкреГрд╖реНрда рдХреЛ рдбреНрд░реИрдЧ рдХреЗ рджреМрд░рд╛рди рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рд▓реЗрдХрд┐рди рдирд╣реАрдВред (рдХреНрд░реЛрдо рдореЗрдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ)
рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдореЗрдВ рдЦреБрд▓реА рд╣реИред
рдЖрдк рд╕рдВрдмрдВрдзрд┐рдд рд╕реНрдЯреИрдХ рдУрд╡рд░рдлрд╝реНрд▓реЛ рдкреНрд░рд╢реНрди рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВред
http://stackoverflow.com/questions/16822920/scroll- while-using-html5-drag-and-drop
рд╕рдорд╛рдзрд╛рди рдХреЗ рд░реВрдк рдореЗрдВ:
рдХреГрдкрдпрд╛ рдЪреЗрдХрдЖрдЙрдЯ рдХрд░реЗрдВ https://github.com/martindrapeau/jQueryDndPageScroll/blob/master/jquery.dnd_page_scroll.js
рд╕рд╛рде рд╣реА рдХрд╛рдо рдХрд░ рд░рд╣реЗ рдЙрджрд╛рд╣рд░рдг
https://jsfiddle.net/0vv7fs63/2/
рдореИрдВ jQuery рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рдирд╣реАрдВ рджреЗ рд░рд╣рд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рд╕реНрд░реЛрдд рдХреЛрдб рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
рдмрд╕ рджреЛ div (рдкреГрд╖реНрда рдХреЗ рдКрдкрд░ рдФрд░ рдиреАрдЪреЗ) рдЬреЛрдбрд╝рдирд╛ рдФрд░ рдбреНрд░реИрдЧ рдУрд╡рд░/рдЗрд╡реЗрдВрдЯ рджрд░реНрдЬ рдХрд░рдирд╛ рд╕реБрдирдирд╛, рдФрд░ рддрджрдиреБрд╕рд╛рд░ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдирд╛ рд╕рдорд╛рдзрд╛рди рд╣реИред
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдбреАрдПрдирдбреА рдХрд╛ рдпрд╣ рд╕рдорд╛рдзрд╛рди рд╣реИ: https://github.com/azuqua/react-dnd-scrollzone
рд╢рд╛рдпрдж рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЕрдм рдмрдВрдж рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ @darthtrevino
рдХреГрдкрдпрд╛ рд╕реЙрд░реНрдЯ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдбреЗрд╡рд▓рдкрд░реНрд╕, рдЗрд╕рдХрд╛ рдХреБрдЫ рд╕рдорд╛рдзрд╛рди рдкреНрд░рджрд╛рди рдХрд░реЗрдВред
рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ рдХреНрдпрд╛ рдЖрдк рдореБрдЭреЗ рдвреВрдВрдв рд╕рдХрддреЗ рд╣реИрдВ? @nossila
@AsceticBoy рдореИрдВ рдЗрд╕рдХреЗ README рд╕реЗ рдмреЗрд╣рддрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛, рдЗрд╕рдХреЗ рдХрдИ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ
рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рдЕрдкрдирд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд┐рдпрд╛ред рдореВрд▓ рд░реВрдк рд╕реЗ рд╕реВрдЪреА рдХрдВрдЯреЗрдирд░ рдХреЛ рдбреНрд░реЙрдк рд▓рдХреНрд╖реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ред
рдкреНрд░рдпреБрдХреНрдд: findDOMNode(component).getBoundingClientRect()
рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдореИрдВ рд╕реВрдЪреА рдХрдВрдЯреЗрдирд░ рдХреЗ рджреЛрдиреЛрдВ рдУрд░ рдХрдм рдерд╛
рддрдм: listContainerDOMNode.scrollLeft += someValue
рд╕реВрдЪреА рдХреЛ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬреЛ рд╕реВрдЪреА рдХрдВрдЯреЗрдирд░ рдХреЛ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рддрд╛ рд╣реИред
рдпрд╣ рдПрдХ рдЕрдЪреНрдЫреА рд╢реБрд░реБрдЖрдд рд╣реИ рд▓реЗрдХрд┐рди рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреЙрдЗрдВрдЯрд░ рд░рдЦрддрд╛ рд╣реИ рддреЛ рднреА рдХреЛрдИ рд╣реЛрд╡рд░ рдИрд╡реЗрдВрдЯ рдЯреНрд░рд┐рдЧрд░ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рд╕реНрдХреНрд░реЙрд▓рд┐рдВрдЧ рдмрдВрдж рд╣реЛ рдЬрд╛рддреА рд╣реИред
рдХреНрдпрд╛ рдХрд┐рд╕реА рдиреЗ рдЗрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рд╣реИ, рдЬрдм рд╕реВрдЪрдХ рдЕрднреА рднреА рд╕реВрдЪреА рдХрдВрдЯреЗрдирд░ рд╕реНрдХреНрд░реЙрд▓ рдХрд░ рд░рд╣рд╛ рд╣реИ?
@nossila ty! рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдбреАрдПрдирдбреА-рд╕реНрдХреНрд░реЙрд▓рдЬрд╝реЛрди рдЖрдХрд░реНрд╖рдг рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ :)
рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдкреБрд░рд╛рдирд╛ рдзрд╛рдЧрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЕрднреА рднреА рдЦреБрд▓рд╛ рд╣реИ ...
рдХреНрдпрд╛ рдХрд┐рд╕реА рдиреЗ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ react-dnd-scrollzone
рдХреЛ WindowScroller
react-virtualized
рд╕реЗ рдЯрдВрдбреЗрдо рдореЗрдВ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕реЗрдЯрдЕрдк рдХрд┐рдпрд╛ рд╣реИред рдФрд░ рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рдХреНрдпрд╛ рдЖрдк рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдореИрдВ WindowScroller
, AutoSizer
рдФрд░ List
рд╕рдВрдпреЛрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ; рдФрд░ scrollzone
рдареАрдХ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рдкрд╛ рд░рд╣реЗ рд╣реИрдВред
рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВ рдПрдХ рдХрд╕реНрдЯрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ рдХрд┐ scrollElement
рдХреЗ рд╕рд╛рде WindowScroller
, рдЬрд╣рд╛рдВ react-dnd-scrollzone
рд╕реЗрдЯ рдпрд╣ рддрддреНрд╡ рдпрд╣ рд▓рдкреЗрдЯрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдХрдВрдЯреЗрдирд░ред рдореИрдВ рдЗрд╕реЗ рдПрдХ рдХрд╕реНрдЯрдо рд╕реНрдХреНрд░реЙрд▓ рддрддреНрд╡ рдкреНрд░реЛрдк рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдлреЛрд░реНрдХ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдбреАрдПрдирдбреА-рд╕реНрдХреНрд░реЙрд▓рдЬрд╝реЛрди рдЕрдм рдирд╡реАрдирддрдо рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдбреАрдПрдирдбреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЖрдИрдПрдордУ рдбреНрд░реИрдЧ рд╕реНрдХреНрд░реЙрд▓рд┐рдВрдЧ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдбреАрдПрдирдбреА рдХреЛрд░ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдиреАрдЪреЗ рдореЗрд░рд╛ рд╕рдорд╛рдзрд╛рди рд╣реИ:
const autoScrollInSafari = (step = 4) => (fn) => {
const inSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
if (inSafari) {
return function (p, m, c) {
const scrollDOM = document.querySelector('.your-scroll-dom-class');
if (scrollDOM) {
const cursor = m.getClientOffset();
const rect = scrollDOM.getBoundingClientRect();
if (cursor.y - rect.top < 50) scrollDOM.scrollTop -= step;
if (rect.bottom - cursor.y < 50) scrollDOM.scrollTop += step;
if (cursor.x - rect.left < 50) scrollDOM.scrollLeft -= step;
if (rect.right - cursor.x < 50) scrollDOM.scrollLeft += step;
}
fn.apply(this, [p, m, c]);
};
}
return fn;
};
const myDropSpec = {
drop() {
// your drop callback
},
hover: autoScrollInSafari((props, monitor, component) => {
// your hover callback
}),
}
рдЙрдордореАрдж рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рдорджрдж рдорд┐рд▓реЗрдЧреАред :рдореБрд╕реНрдХреБрд░рд╛рдУ:
рд╕реНрдХреНрд░реЙрд▓рдЬрд╝реЛрди рдХрд╛ рдПрдХ рдЕрджреНрдпрддрди рдХрд╛рдВрдЯрд╛ (https://github.com/frontend-collective/frontend-collective-react-dnd-scrollzone) 7.0.2 рддрдХ рдФрд░ рд╕рд╣рд┐рдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдбреАрдПрдирдбреА рдХреЗ рдЕрдзрд┐рдХ рдЖрдзреБрдирд┐рдХ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЙрд╕ рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рдкрд░реЗ, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдбреАрдПрдирдбреА рдиреЗ рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдбреНрд░реИрдЧрдбреНрд░реЙрдкрдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ред
./node_modules/frontend-collective-react-dnd-scrollzone/lib/index.js
Module not found: Can't resolve 'react-dnd/lib/DragDropContext' in 'X:\WSProjects\sonnys-queue\node_modules\frontend-collective-react-dnd-scrollzone\lib'
@Soundvessel рдЬреЛ react-dnd/lib/cjs/DragDropContext
рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдЖрдк рдЗрд╕реЗ react-dnd
рдХреЗ рд╢реАрд░реНрд╖-рд╕реНрддрд░ рд╕реЗ рдЖрдпрд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреБрд░рд╛рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рд╣рд╛рд▓ рдХреА рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реИред рдЖрдЧреЗ рдХреЛрдИ рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ рдЗрд╕реЗ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЖрдкрдХреЗ рдпреЛрдЧрджрд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред
рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдбреАрдПрдирдбреА рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рд╛?
рд╕реНрдХреНрд░реЙрд▓рдЬрд╝реЛрди рдХрд╛ рдПрдХ рдЕрджреНрдпрддрди рдХрд╛рдВрдЯрд╛ (https://github.com/frontend-collective/frontend-collective-react-dnd-scrollzone) 7.0.2 рддрдХ рдФрд░ рд╕рд╣рд┐рдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдбреАрдПрдирдбреА рдХреЗ рдЕрдзрд┐рдХ рдЖрдзреБрдирд┐рдХ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЙрд╕ рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рдкрд░реЗ, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдбреАрдПрдирдбреА рдиреЗ рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдбреНрд░реИрдЧрдбреНрд░реЙрдкрдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ред
./node_modules/frontend-collective-react-dnd-scrollzone/lib/index.js Module not found: Can't resolve 'react-dnd/lib/DragDropContext' in 'X:\WSProjects\sonnys-queue\node_modules\frontend-collective-react-dnd-scrollzone\lib'
@Soundvessel рдХреНрдпрд╛ рдЖрдкрдиреЗ рд╕реБрдЭрд╛рдП рдЧрдП @darthtrevino рдХреЛ рдареАрдХ рдХрд┐рдпрд╛ рдерд╛?
рдЪреВрдВрдХрд┐ рдореБрдЭреЗ рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдорд┐рд▓рд╛, рдФрд░ рдХреБрдЫ рд╕рдорд╛рдзрд╛рди рдирд╡реАрдирддрдо рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдбреАрдПрдирдбреА рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╕реНрд╡рдпрдВ рдПрдХ рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдЖрдпрд╛: https://gist.github.com/orlandovallejos/ed9c79dd67e96c25cfcc8f1008df9489
рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рдФрд░ рдХреА рдорджрдж рдХрд░рддрд╛ рд╣реИред
@orlandovallejos
рд╣реИрд▓реЛ, рдХреНрдпрд╛ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рддрдирд╛рд╡ рдкрд░реАрдХреНрд╖рдг рдЙрджрд╛рд╣рд░рдг рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? https://react-dnd.github.io/react-dnd/examples/sortable/stress-test
рдореИрдВрдиреЗ рдереЛрдбрд╝реА рдмрд╣реБрдд рдХреЛрд╢рд┐рд╢ рдХреА рд▓реЗрдХрд┐рди рдХреЛрдИ рд╕рдлрд▓рддрд╛ рдирд╣реАрдВ рдорд┐рд▓реАред
@MartinN3 рдпрд╣рд╛рдБ рдЖрдкрдХреЗ рдкрд╛рд╕ рдореЗрд░рд╛ рджреЛрд╕реНрдд рд╣реИ: https://codesandbox.io/s/react-dnd-example-12-s3nnf
рдЖрдкрдХреЛ рдЗрд╕реЗ рдЕрдкрдиреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ, рдСрдлрд╕реЗрдЯ, рдбрд┐рд╡ рдХрдВрдЯреЗрдирд░ (рд╢рд╛рдпрдж 1 рд╕реЗ рдЕрдзрд┐рдХ), рд╕реНрдХреНрд░реЙрд▓рд┐рдВрдЧ рдЧрддрд┐ (PX_DIFF рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рд╕реНрдХреНрд░реЙрд▓рд┐рдВрдЧ рдлреАрдЪрд░ рдХреНрд░реЛрдо рдореЗрдВ рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдЪреВрдВрдХрд┐ рдореБрдЭреЗ рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдорд┐рд▓рд╛, рдФрд░ рдХреБрдЫ рд╕рдорд╛рдзрд╛рди рдирд╡реАрдирддрдо рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдбреАрдПрдирдбреА рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╕реНрд╡рдпрдВ рдПрдХ рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдЖрдпрд╛: https://gist.github.com/orlandovallejos/ed9c79dd67e96c25cfcc8f1008df9489
рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рдФрд░ рдХреА рдорджрдж рдХрд░рддрд╛ рд╣реИред
рдпрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдЙрдкрд╛рдп рд╣реИред рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж :)
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдбреАрдПрдирдбреА-рд╕реНрдХреНрд░реЙрд▓рдЬрд╝реЛрди рдЕрдм рдирд╡реАрдирддрдо рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдбреАрдПрдирдбреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЖрдИрдПрдордУ рдбреНрд░реИрдЧ рд╕реНрдХреНрд░реЙрд▓рд┐рдВрдЧ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдбреАрдПрдирдбреА рдХреЛрд░ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред