HTML5 рдлрд╝рд╛рдЗрд▓ API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлреНрд▓реЗрдХреНрд╕ рдореЗрдВ Drag'n'drop рдлрд╛рдЗрд▓реЗрдВ

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

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрдИ рдЪрд░рдгреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реИред рдкрд╣рд▓рд╛ рдХрджрдо рдлрд╝рд╛рдЗрд▓ API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреНрд░реИрдЧ рдПрди'рдПрдирдбреНрд░реЙрдк рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рд╣реИред рд╕рднреА рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЙрд╕ рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рд╡реЗ рдлрд┐рд░ рдлреНрд▓реИрд╢ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред

 $(document).ready(function() { var dropZone = $('div#dropZone'); //    if (typeof(window.FileReader) == 'undefined') { dropZone.text('  !'); dropZone.addClass('error'); } //   Drop dropZone[0].ondrop = function(event) { event.preventDefault(); dropZone.removeClass('hover'); dropZone.addClass('drop'); displayFiles(event.dataTransfer.files); }; }); //-------------------------------------------------------------------------------------------------- var fileList = new Array(); function displayFiles(files) { $.each(files, function(i, file) { var imgList = $('ul#img-list'); var maxFileSize = 20*1000000; //    - 1 . if (!file.type.match(/image.*/)) { //    return true; } //   li     ,  //      file,    File (  ) var li = $('<li/>').appendTo(imgList); $('<div/>').text(file.name).appendTo(li); //    if (file.size > maxFileSize) { $('<div/>').text('  !').appendTo(li); } else { var img = $('<img/>').appendTo(li); li.file = file; //   FileReader     ,     //     var reader = new FileReader(); reader.onload = (function(aImg, file) { return function(e) { aImg.attr('src', e.target.result); aImg.attr('width', 75); file.f_data = e.target.result; //       fileList.push(file); }; })(img, file); reader.readAsDataURL(file); } }); } //-------------------------------------------------------------------------------------------------- 
HTML flex , div, .
<div style="float:left"> </div> <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="https://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0" id="web-client" width="800px" align="middle" height="600px"> <param name="allowScriptAccess" value="sameDomain"> <param name="allowFullScreen" value="false"> <param name="movie" value="dd_test.swf"><param name="quality" value="high"><param name="bgcolor" value="#cccccc"><embed src="test.swf" quality="high" bgcolor="#cccccc" name="web-client" allowscriptaccess="sameDomain" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="https://www.adobe.com/go/getflashplayer" width="800" align="middle" height="600"> </object> <div id="dropzone" style="float:left"> <p> , .</p> <ul id="img-list"></ul> </div>
$(document).ready(function() { var dropZone = $('div#dropZone'); // if (typeof(window.FileReader) == 'undefined') { dropZone.text(' !'); dropZone.addClass('error'); } // Drop dropZone[0].ondrop = function(event) { event.preventDefault(); dropZone.removeClass('hover'); dropZone.addClass('drop'); displayFiles(event.dataTransfer.files); }; }); //-------------------------------------------------------------------------------------------------- var fileList = new Array(); function displayFiles(files) { $.each(files, function(i, file) { var imgList = $('ul#img-list'); var maxFileSize = 20*1000000; // - 1 . if (!file.type.match(/image.*/)) { // return true; } // li , // file, File ( ) var li = $('<li/>').appendTo(imgList); $('<div/>').text(file.name).appendTo(li); // if (file.size > maxFileSize) { $('<div/>').text(' !').appendTo(li); } else { var img = $('<img/>').appendTo(li); li.file = file; // FileReader , // var reader = new FileReader(); reader.onload = (function(aImg, file) { return function(e) { aImg.attr('src', e.target.result); aImg.attr('width', 75); file.f_data = e.target.result; // fileList.push(file); }; })(img, file); reader.readAsDataURL(file); } }); } //--------------------------------------------------------------------------------------------------
HTML flex , div, .
<div style="float:left"> </div> <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="https://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0" id="web-client" width="800px" align="middle" height="600px"> <param name="allowScriptAccess" value="sameDomain"> <param name="allowFullScreen" value="false"> <param name="movie" value="dd_test.swf"><param name="quality" value="high"><param name="bgcolor" value="#cccccc"><embed src="test.swf" quality="high" bgcolor="#cccccc" name="web-client" allowscriptaccess="sameDomain" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="https://www.adobe.com/go/getflashplayer" width="800" align="middle" height="600"> </object> <div id="dropzone" style="float:left"> <p> , .</p> <ul id="img-list"></ul> </div>
 $(document).ready(function() { var dropZone = $('div#dropZone'); //    if (typeof(window.FileReader) == 'undefined') { dropZone.text('  !'); dropZone.addClass('error'); } //   Drop dropZone[0].ondrop = function(event) { event.preventDefault(); dropZone.removeClass('hover'); dropZone.addClass('drop'); displayFiles(event.dataTransfer.files); }; }); //-------------------------------------------------------------------------------------------------- var fileList = new Array(); function displayFiles(files) { $.each(files, function(i, file) { var imgList = $('ul#img-list'); var maxFileSize = 20*1000000; //    - 1 . if (!file.type.match(/image.*/)) { //    return true; } //   li     ,  //      file,    File (  ) var li = $('<li/>').appendTo(imgList); $('<div/>').text(file.name).appendTo(li); //    if (file.size > maxFileSize) { $('<div/>').text('  !').appendTo(li); } else { var img = $('<img/>').appendTo(li); li.file = file; //   FileReader     ,     //     var reader = new FileReader(); reader.onload = (function(aImg, file) { return function(e) { aImg.attr('src', e.target.result); aImg.attr('width', 75); file.f_data = e.target.result; //       fileList.push(file); }; })(img, file); reader.readAsDataURL(file); } }); } //-------------------------------------------------------------------------------------------------- 
HTML flex , div, .
<div style="float:left"> </div> <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="https://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0" id="web-client" width="800px" align="middle" height="600px"> <param name="allowScriptAccess" value="sameDomain"> <param name="allowFullScreen" value="false"> <param name="movie" value="dd_test.swf"><param name="quality" value="high"><param name="bgcolor" value="#cccccc"><embed src="test.swf" quality="high" bgcolor="#cccccc" name="web-client" allowscriptaccess="sameDomain" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="https://www.adobe.com/go/getflashplayer" width="800" align="middle" height="600"> </object> <div id="dropzone" style="float:left"> <p> , .</p> <ul id="img-list"></ul> </div>
$(document).ready(function() { var dropZone = $('div#dropZone'); // if (typeof(window.FileReader) == 'undefined') { dropZone.text(' !'); dropZone.addClass('error'); } // Drop dropZone[0].ondrop = function(event) { event.preventDefault(); dropZone.removeClass('hover'); dropZone.addClass('drop'); displayFiles(event.dataTransfer.files); }; }); //-------------------------------------------------------------------------------------------------- var fileList = new Array(); function displayFiles(files) { $.each(files, function(i, file) { var imgList = $('ul#img-list'); var maxFileSize = 20*1000000; // - 1 . if (!file.type.match(/image.*/)) { // return true; } // li , // file, File ( ) var li = $('<li/>').appendTo(imgList); $('<div/>').text(file.name).appendTo(li); // if (file.size > maxFileSize) { $('<div/>').text(' !').appendTo(li); } else { var img = $('<img/>').appendTo(li); li.file = file; // FileReader , // var reader = new FileReader(); reader.onload = (function(aImg, file) { return function(e) { aImg.attr('src', e.target.result); aImg.attr('width', 75); file.f_data = e.target.result; // fileList.push(file); }; })(img, file); reader.readAsDataURL(file); } }); } //--------------------------------------------------------------------------------------------------
HTML flex , div, .
<div style="float:left"> </div> <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="https://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0" id="web-client" width="800px" align="middle" height="600px"> <param name="allowScriptAccess" value="sameDomain"> <param name="allowFullScreen" value="false"> <param name="movie" value="dd_test.swf"><param name="quality" value="high"><param name="bgcolor" value="#cccccc"><embed src="test.swf" quality="high" bgcolor="#cccccc" name="web-client" allowscriptaccess="sameDomain" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="https://www.adobe.com/go/getflashplayer" width="800" align="middle" height="600"> </object> <div id="dropzone" style="float:left"> <p> , .</p> <ul id="img-list"></ul> </div>

рджреВрд╕рд░рд╛ рдЪрд░рдг рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдлреНрд▓реИрд╢ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рд╣реИред рдмрд╛рд╣рд░реА рджреБрдирд┐рдпрд╛ рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдлреНрд▓реИрд╢ рдореЗрдВ рдПрдХреНрд╕рдЯрд░реНрдирд▓ рдЗрдВрдЯреНрд░реЛрдбрдХреНрд╢рди рдХреНрд▓рд╛рд╕ рд╣реИ, рдпрд╣ рдЖрдкрдХреЛ рдЬреЗрдПрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдлреНрд▓реИрд╢ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рддрд╛ рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдлреНрд▓реИрд╢ рд╕реЗ рдХреЙрд▓рд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдореЗрд░реЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рдереЗ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЕрдВрджрд░ рдЯрд╛рдЗрдорд░ рд╢реБрд░реВ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рдФрд░ рдЬреЗрдПрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред
рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛ рдлреЛрдЯреЛрдЧреНрд░рд╛рдл рдЯреНрд░рд╛рдВрд╕рдорд┐рд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдереАред рдЗрдирд╕рд╛рдЗрдб рдлреНрд▓реИрд╢ рдХреЗ рдЕрдВрджрд░, рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдерд╛ рдХрд┐ рдореИрдВ рдмрд╛рдЗрдЯрдПрдпрд░реЗ рдХреНрд▓рд╛рд╕ рдХреА рдПрдХ рд╡рд╕реНрддреБ рдХреЗ рд░реВрдк рдореЗрдВ рдлреЛрдЯреЛрдЧреНрд░рд╛рдлреА рдХрд░реВрдВ ред рдЪреВрдБрдХрд┐ JS рдХреЗ рдкрд╛рд╕ ByteArray рд╡рд░реНрдЧ рдХрд╛ рдПрдирд╛рд▓реЙрдЧ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЯреНрд░рд╛рдВрд╕рдорд┐рд╢рди рдХреЗ рджреМрд░рд╛рди рдмреЗрд╕ 64 рдореЗрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдбреЗрдЯрд╛ рд░реВрдкрд╛рдВрддрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред рдлрд╝рд╛рдЗрд▓ API рдореЗрдВ рдПрдХ рд╕рдВрдмрдВрдзрд┐рдд рдлрд╝рдВрдХреНрд╢рди рд╣реИ, readAsDataURL (), рдЬреЛ рдмреЗрд╕ 64 рдПрдирдХреЛрдбреЗрдб рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдлрд╝рд╛рдЗрд▓ рд▓реМрдЯрд╛рддрд╛ рд╣реИред рд╣рдо рдлреНрд▓реИрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдореА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ Base64Decoder рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдореЗрдВ рдЕрдкрдиреА рдореВрд▓ рддрд╕реНрд╡реАрд░ рд╡рд╛рд▓реЗ рдмрд╛рдЗрдЯрдПрд░реЗ рд╡рд░реНрдЧ рдХреА рдПрдХ рд╡рд╕реНрддреБ рдорд┐рд▓рддреА рд╣реИред
 // Flex ,     var dragTimer:Timer; var file_count_already_have:int; //   -  JS  ,   JS -   public function init_draginteface():void { dragTimer = new Timer(3*1000,0); //  3  dragTimer.addEventListener(TimerEvent.TIMER, dragTimerEvent); dragTimer.start(); file_count_already_have = 0; } //--------------------------------------------------------------------------- public function dragTimerEvent(e:TimerEvent):void { dragTimer.stop(); if(ExternalInterface.available) { var file_count:int = ExternalInterface.call("dropFileCount"); // JS -,      if (file_count>0) { for(var i:int = file_count_already_have ; i<file_count; i++) { dragImageFromJS(i); } file_count_already_have = file_count; } dragTimer.start(); } } //--------------------------------------------------------------------------- public function dragImageFromJS(i:int):void { var file_size:int = ExternalInterface.call("getFileSize", i); //    var file_name:String = ExternalInterface.call("getFileName", i); //   var file_ba:ByteArray = new ByteArray; var base64dec:Base64Decoder = new Base64Decoder(); var start_load:uint = getTimer(); base64dec.decode(ExternalInterface.call("getFile", i)); //       base64 var load_time:uint = getTimer() - start_load; file_ba = base64dec.toByteArray(); if(file_ba != null) { trace(""); trace("add new item [file_name: "+file_name+"] [file_size:"+file_size.toString()+"] [fr_ba_size: "+file_ba.length + "] [load_time: "+load_time.toString()+"]"); loadFromByteArray(file_ba); //   Flex  } } 
// Flex , var dragTimer:Timer; var file_count_already_have:int; // - JS , JS - public function init_draginteface():void { dragTimer = new Timer(3*1000,0); // 3 dragTimer.addEventListener(TimerEvent.TIMER, dragTimerEvent); dragTimer.start(); file_count_already_have = 0; } //--------------------------------------------------------------------------- public function dragTimerEvent(e:TimerEvent):void { dragTimer.stop(); if(ExternalInterface.available) { var file_count:int = ExternalInterface.call("dropFileCount"); // JS -, if (file_count>0) { for(var i:int = file_count_already_have ; i<file_count; i++) { dragImageFromJS(i); } file_count_already_have = file_count; } dragTimer.start(); } } //--------------------------------------------------------------------------- public function dragImageFromJS(i:int):void { var file_size:int = ExternalInterface.call("getFileSize", i); // var file_name:String = ExternalInterface.call("getFileName", i); // var file_ba:ByteArray = new ByteArray; var base64dec:Base64Decoder = new Base64Decoder(); var start_load:uint = getTimer(); base64dec.decode(ExternalInterface.call("getFile", i)); // base64 var load_time:uint = getTimer() - start_load; file_ba = base64dec.toByteArray(); if(file_ba != null) { trace(""); trace("add new item [file_name: "+file_name+"] [file_size:"+file_size.toString()+"] [fr_ba_size: "+file_ba.length + "] [load_time: "+load_time.toString()+"]"); loadFromByteArray(file_ba); // Flex } }

 //JS -,    Flex  function dropFileCount() //   { return fileList.length; } //-------------------------------------------------------------------------------------------------- function getFile(i) //     { var data = fileList[i].f_data; var data_cat = data.substr(23); return data_cat; } //    ,   ,    //data:image/jpeg;base64,/9j/4U3ARXhpZgAASUkq //-------------------------------------------------------------------------------------------------- function getFileSize(i) { return fileList[i].size; } //-------------------------------------------------------------------------------------------------- function getFileName(i) { return fileList[i].name; } //-------------------------------------------------------------------------------------------------- 
//JS -, Flex function dropFileCount() // { return fileList.length; } //-------------------------------------------------------------------------------------------------- function getFile(i) // { var data = fileList[i].f_data; var data_cat = data.substr(23); return data_cat; } // , , //data:image/jpeg;base64,/9j/4U3ARXhpZgAASUkq //-------------------------------------------------------------------------------------------------- function getFileSize(i) { return fileList[i].size; } //-------------------------------------------------------------------------------------------------- function getFileName(i) { return fileList[i].name; } //--------------------------------------------------------------------------------------------------

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдореЗрдВ Flex'n Application рдкрд░ рдлреЛрдЯреЛ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреНрд░реИрдЧ рдПрди'рдПрдирдбреНрд░реЙрдк рдорд┐рд▓реЗрдЧрд╛ред ByteArray рд╕реЗ рдлрд╝реЛрдЯреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЯреБрдХрдбрд╝рд╛ред
 <mx:Script> <![CDATA[ // Flex       ByteArray public function loadFromByteArray(data:ByteArray):void { _loader = new Loader(); _loader.contentLoaderInfo.addEventListener(Event.COMPLETE,_load_loader_complete); _loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, errorOnLoad); _loader.loadBytes(data); } public function _load_loader_complete(e:Event):void { _loader.removeEventListener(Event.COMPLETE,_load_loader_complete); var bitmapIm:Bitmap = Bitmap(e.target.content); this.itemIm.addChild(bitmapIm); } ]]> </mx:Script> <mx:Image source="" id="itemIm" maxWidth="100" maxHeight="100" horizontalAlign="left" verticalAlign="top"/> 
<mx:Script> <![CDATA[ // Flex ByteArray public function loadFromByteArray(data:ByteArray):void { _loader = new Loader(); _loader.contentLoaderInfo.addEventListener(Event.COMPLETE,_load_loader_complete); _loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, errorOnLoad); _loader.loadBytes(data); } public function _load_loader_complete(e:Event):void { _loader.removeEventListener(Event.COMPLETE,_load_loader_complete); var bitmapIm:Bitmap = Bitmap(e.target.content); this.itemIm.addChild(bitmapIm); } ]]> </mx:Script> <mx:Image source="" id="itemIm" maxWidth="100" maxHeight="100" horizontalAlign="left" verticalAlign="top"/>

рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдореЗрдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдорд╛рдЗрдирд╕ рд╣реИ, рдЬрдм рдмрдбрд╝реЗ рдлрд╝реЛрдЯреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИред рд╢рд╛рдпрдж рдПрдХ рдмреЗрд╣рддрд░ рддрд░реАрдХрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрд╣ рдирд╣реАрдВ рдорд┐рд▓рд╛ред

ps рдПрдХ рдХрд╛рдордХрд╛рдЬреА рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ, рдЗрд╕реЗ рдПрдХ рд╡рд┐рдЬреНрдЮрд╛рдкрди рди рдорд╛рдиреЗрдВ, рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реНрдерд╛рдиреАрдп рд╣реИ рдФрд░ рдПрдХ рдЕрд▓рдЧ рджрд░реНрд╢рдХ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХреА рдЧрдИ рд╣реИред рдЙрджрд╛рд╣рд░рдг


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


All Articles