{"id":191850,"date":"2013-08-29T12:59:02","date_gmt":"2013-08-29T08:59:02","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=191850"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=191850","title":{"rendered":"<span class=\"post_title\">\u0414\u0435\u043b\u0430\u0435\u043c \u043a\u0430\u0440\u0442\u0443 \u0443\u043c\u0430 \u043d\u0430 Javascript \u0441 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u043c \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435\u043c \u0432 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430<\/span>"},"content":{"rendered":"<div class=\"content html_format\"> \t\t\t<img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage3\/ea6\/221\/1d4\/ea62211d4013faa49c22a69a22e10416.png\"\/><br \/>  \u042d\u0442\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0443\u0447\u0435\u0431\u043d\u044b\u0439 <a href=\"https:\/\/4tree.ru\/mindmap\/\">\u043f\u0440\u0438\u043c\u0435\u0440<\/a> \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 \u043a\u0430\u0440\u0442\u044b \u0443\u043c\u0430. \u0417\u0430 \u0441\u0447\u0451\u0442 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u0445 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u0432 \u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u043f\u043e\u043d\u044f\u0442\u044c \u0435\u0433\u043e \u043d\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c. <\/p>\n<p>  \u042f \u043e\u0442\u0440\u0430\u0436\u0443 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 \u043a\u0430\u0440\u0442\u044b \u0443\u043c\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430. \u041f\u0440\u0438\u0447\u0451\u043c, \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043d\u0435 LocalStorage, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u0442\u044c 5 \u043c\u0435\u0433\u0430\u0431\u0430\u0439\u0442. \u041e\u0431\u044a\u0451\u043c \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0435\u0432\u044b\u0441\u0438\u0442\u044c 100-200 \u043c\u0435\u0433\u0430\u0431\u0430\u0439\u0442, \u0442\u0430\u043a \u043a\u0430\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f IndexedDB \u0438\u043b\u0438 webSQL, \u043c\u043e\u0442\u0440\u044f \u0447\u0442\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u0432 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435.<\/p>\n<p>  \u0418\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 <a href=\"https:\/\/github.com\/Imater\/mindmap\">\u0432\u044b\u043b\u043e\u0436\u0435\u043d\u044b \u0432 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043d\u0430 Github<\/a>.<\/p>\n<p>  \u041c\u044b \u0443\u043b\u043e\u0436\u0438\u043c\u0441\u044f \u0432 520 \u0441\u0442\u0440\u043e\u043a \u043a\u043e\u0434\u0430, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432 \u043d\u0430\u0448\u0435\u0439 \u043a\u0430\u0440\u0442\u0435 \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u0442\u044c \u0443\u0437\u043b\u044b \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439, \u0443\u0434\u0430\u043b\u044f\u0442\u044c, \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0438 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0435. \u0410 \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0442\u044c \u043e\u0434\u043d\u0443 \u0438\u0437 120 \u0438\u043a\u043e\u043d\u043e\u043a \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u043e\u0435 \u043c\u0435\u043d\u044e.<\/p>\n<p>  \u0421\u0435\u043a\u0440\u0435\u0442 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u0438\u0437\u043c\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u0435 \u0432 \u0431\u043e\u044e \u043f\u043b\u0430\u0433\u0438\u043d\u044b:  <\/p>\n<ol>\n<li><a href=\"http:\/\/git.yathit.com\/ydn-db\/wiki\/Home\">Ydn.db<\/a> \u2014 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 \u0441 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0432\u044b\u0431\u043e\u0440\u043e\u043c \u043b\u0443\u0447\u0448\u0435\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 \u0438 \u0435\u0434\u0438\u043d\u044b\u043c API <\/li>\n<li><a href=\"http:\/\/medialize.github.io\/jQuery-contextMenu\/\">jQuery context menu<\/a> \u2014 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u043e\u0435 \u043c\u0435\u043d\u044e, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 Javascript<\/li>\n<li><a href=\"http:\/\/jsplumbtoolkit.com\/home\/jquery.html\">jsPlumb<\/a> \u2014 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0435\u0435 \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043b\u0438\u043d\u0438\u0438 \u043c\u0435\u0436\u0434\u0443 HTML \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438<\/li>\n<li><a href=\"http:\/\/jqueryui.com\/droppable\/\">jQuery UI <\/a>\u2014 Drag&#038;drop \u2014 \u043f\u0435\u0440\u0435\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u043d\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439<\/li>\n<\/ol>\n<p>  PS: \u0422\u0430\u043a\u0436\u0435 \u043c\u044b \u043d\u0430\u0443\u0447\u0438\u043c\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u00ab\u0441\u0438\u043d\u0433\u043b\u0442\u043e\u043d\u00bb, \u043e\u0431\u043b\u0435\u0433\u0447\u0430\u0442\u044c \u0441\u0435\u0431\u0435 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 jQuery \u0438 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 $.Deferred(), \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043f\u043b\u0430\u0433\u0438\u043d\u0430 LiveReload, \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043c \u043a\u0440\u0430\u0441\u043a\u0443 \u043d\u0430 \u043a\u043b\u0430\u0432\u0438\u0448\u0435 F5 \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432 CSS \u0438 \u043a\u043e\u0434\u0430 \u0432 HTML \u0438 Javascript.<br \/>  <a name=\"habracut\"><\/a><\/p>\n<h5>\u041a\u043e\u0434 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0441 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u043c\u0438, \u0434\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u0442\u043e\u0440\u043e\u043f\u0438\u0442\u0441\u044f<\/h5>\n<p>  \u041c\u043d\u043e\u0433\u0438\u0435 \u043c\u043e\u0433\u0443\u0442 \u0434\u0430\u043b\u044c\u0448\u0435 \u043d\u0435 \u0447\u0438\u0442\u0430\u0442\u044c, \u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u043a\u043e\u0434\u043e\u043c.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0413\u043b\u0430\u0432\u043d\u044b\u0439 Javascript \u043a\u043e\u0434 \u0441 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u043c\u0438 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u043c\u0438<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"javascript\">var API_4_MINDMAP = function(){  \/\/singleton - \u043f\u0440\u0438 \u043c\u043d\u043e\u0433\u043e\u043a\u0440\u0430\u0442\u043d\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0435\u0434\u0438\u043d\u043e\u0436\u0434\u044b \t if ( (typeof arguments.callee.instance=='undefined') ) { \/\/\u0435\u0441\u043b\u0438 \u043e\u0431\u044a\u0435\u043a\u0442 \u0435\u0449\u0451 \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u043d \t\t arguments.callee.instance = new function() { \t\t     var this_api = this; \/\/\u043a\u044d\u0448\u0438\u0440\u0443\u0435\u043c \u0441\u0430\u043c\u043e\u0433\u043e \u0441\u0435\u0431\u044f, \u0447\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u043d\u0443\u0442\u0440\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0439  \t\t     var my_all_data = {}; \/\/\u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \t\t       \t\t     var my_all_data_template = { \/\/\u0437\u0430\u0434\u0430\u0451\u043c \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u043f\u0435\u0440\u0432\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a \t\t\t\t &quot;n1&quot;:{ id:1, parent_id:0, title:&quot;\u041a\u0430\u0440\u0442\u0430 \u0443\u043c\u0430&lt;br&gt;\u0441\u0432\u043e\u0438\u043c\u0438 \u0440\u0443\u043a\u0430\u043c\u0438&lt;br&gt;&quot;+     \t\t\t &quot;\u0441 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0445&lt;br&gt;\u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435.&lt;br&gt;Javascript&quot; },     \t\t\t &quot;n2&quot;:{ id:2, parent_id:1, title:&quot;\u0418\u0437\u0443\u0447\u0438\u043c&quot;, icon:&quot;icon-gift&quot; },     \t\t\t &quot;n3&quot;:{ id:3, parent_id:2, title:&quot;\u0420\u0438\u0441\u0443\u0435\u043c \u043b\u0438\u043d\u0438\u0438 \u043c\u0435\u0436\u0434\u0443 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438&quot;, icon:&quot;icon-flow-line&quot; },      \t\t\t &quot;n5&quot;:{ id:5, parent_id:3, title:&quot;\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043f\u043b\u0430\u0433\u0438\u043d jsPlumb&quot;, icon: &quot;icon-link&quot; },      \t\t\t &quot;n4&quot;:{ id:4, parent_id:3, title:&quot;\u041a\u0430\u0436\u0434\u0430\u044f \u043b\u0438\u043d\u0438\u044f - \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 SVG&quot; },      \t\t\t &quot;n7&quot;:{ id:7, parent_id:6, title:&quot;\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043f\u043b\u0430\u0433\u0438\u043d jQuery ContextMenu&quot;, icon: &quot;icon-link&quot; },      \t\t\t &quot;n8&quot;:{ id:8, parent_id:1, title:&quot;\u041e\u0431\u044a\u0451\u043c \u043a\u043e\u0434\u0430&quot;, icon: &quot;icon-lamp&quot; },      \t\t\t &quot;n9&quot;:{ id:9, parent_id:8, title:&quot;Javascript + jQuery \u2014 520 \u0441\u0442\u0440\u043e\u043a&quot; },     \t\t\t &quot;n10&quot;:{ id:10, parent_id:2, title:&quot;\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u044f\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435&quot;, icon: &quot;icon-floppy-1&quot; },     \t\t\t &quot;n11&quot;:{ id:11, parent_id:17, title:&quot;IndexedDB&quot; },     \t\t\t &quot;n12&quot;:{ id:12, parent_id:17, title:&quot;webSQL&quot; },     \t\t\t &quot;n13&quot;:{ id:13, parent_id:17, title:&quot;LocalStorage&quot; },     \t\t\t &quot;n14&quot;:{ id:14, parent_id:10, title:&quot;\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043f\u043b\u0430\u0433\u0438\u043d Ydn.db&quot;, icon: &quot;icon-link&quot; },     \t\t\t &quot;n15&quot;:{ id:15, parent_id:10, title:&quot;\u041e\u0431\u044a\u0451\u043c \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d&quot; },     \t\t\t &quot;n16&quot;:{ id:16, parent_id:2, title:&quot;\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0441\u0438\u043d\u0433\u043b\u0442\u043e\u043d \u0432 Javascript&quot;, icon: &quot;icon-cd&quot; },     \t\t\t &quot;n17&quot;:{ id:17, parent_id:10, title:&quot;\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u044b&quot; },     \t\t\t &quot;n18&quot;:{ id:18, parent_id:6, title:&quot;\u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0443\u043d\u043a\u0442\u043e\u0432&quot; },     \t\t\t &quot;n20&quot;:{ id:20, parent_id:8, title:&quot;CSS \u2014 220 \u0441\u0442\u0440\u043e\u043a&quot; },     \t\t\t &quot;n19&quot;:{ id:19, parent_id:8, title:&quot;HTML \u2014 50 \u0441\u0442\u0440\u043e\u043a&quot; },     \t\t\t &quot;n22&quot;:{ id:22, parent_id:16, title:&quot;\u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445&quot; },     \t\t\t &quot;n23&quot;:{ id:23, parent_id:16, title:&quot;\u041d\u0430\u0432\u043e\u0434\u0438\u043c \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0441\u0440\u0435\u0434\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0439&quot; },     \t\t\t &quot;n24&quot;:{ id:24, parent_id:2, title:&quot;\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0438\u043a\u043e\u043d\u043e\u0447\u043d\u044b\u0439 \u0448\u0440\u0438\u0444\u0442&quot;, icon: &quot;icon-emo-wink&quot; },     \t\t\t &quot;n6&quot;:{ id:6, parent_id:2, title:&quot;\u041a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u043e\u0435 \u043c\u0435\u043d\u044e&quot;, icon: &quot;icon-list&quot; },      \t\t\t &quot;n25&quot;:{ id:25, parent_id:24, title:&quot;\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043d\u0430\u0431\u043e\u0440 \u0448\u0440\u0438\u0444\u0442\u043e\u0432 Fontello&quot;, icon: &quot;icon-link&quot; },     \t\t\t &quot;n27&quot;:{ id:27, parent_id:2, title:&quot;Drag&Drop jQuery UI&quot;, icon: &quot;icon-link&quot; },     \t\t\t &quot;n26&quot;:{ id:26, parent_id:24, title:&quot;\u0412\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0435 \u0438\u043a\u043e\u043d\u043a\u0438 \u0441 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u044b\u043c \u0441\u0433\u043b\u0430\u0436\u0438\u0432\u0430\u043d\u0438\u0435\u043c&quot; }     \t\t   }; \t\t \t \t\t \t this.jsSaveAllToDB = function() { \/\/\u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0432\u0435\u0441\u044c \u043c\u0430\u0441\u0441\u0438\u0432 \u0432 \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \t\t\t \t $.each(my_all_data, function(i, el){ \t\t       \t\tdb.put(&quot;mindmap_db&quot;, el ).done(function(){  \t\t       \t\t}); \t\t\t \t }); \t\t \t }  \t\t \t this.jsLoadAllFromDB = function() { \/\/\u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0432\u0435\u0441\u044c \u043c\u0430\u0441\u0441\u0438\u0432 \u0438\u0437 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 \u0438\u043b\u0438 \u0438\u0437 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \t\t\t \t var d=new $.Deferred(); \/\/\u043e\u0431\u044a\u0435\u043a\u0442 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e  \t\t \t \t my_all_data = {}; \/\/\u043e\u0431\u043d\u0443\u043b\u044f\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \t    \t\t db.values(&quot;mindmap_db&quot;,null,99999999).done(function(records) { \t    \t\t \tif(records.length && false) { \t    \t\t \t$.each(records, function(i, el){ \t\t    \t\t \tmy_all_data[&quot;n&quot;+el.id] = {}; \t\t    \t\t \tmy_all_data[&quot;n&quot;+el.id] = el; \t    \t\t \t}); \t    \t\t \t} else { \/\/\u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u043f\u0435\u0440\u0432\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a, \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u044e \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u0448\u0430\u0431\u043b\u043e\u043d\u0443 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e \u0432 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \t\t    \t\t \tmy_all_data = my_all_data_template; \t\t    \t\t \tthis_api.jsSaveAllToDB(); \t    \t\t \t} \t    \t\t \td.resolve(); \/\/\u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043e\u0431\u0435\u0449\u0430\u043d\u0438\u0435, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f done \t    \t\t }); \t    \t\t  \t    \t\t return d.promise(); \/\/\u0433\u043e\u0432\u043e\u0440\u0438\u043c, \u0447\u0442\u043e \u0441\u043a\u043e\u0440\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043c \u043e\u0431\u0435\u0449\u0430\u043d\u0438\u0435, \u043a\u043e\u0433\u0434\u0430 \u0432\u0441\u0451 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u0441\u044f  \t\t \t } \t\t \t \t\t \t this.jsFind = function(id, changes) { \/\/\u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0441 id \u0438\u043b\u0438 \u043c\u0435\u043d\u044f\u0435\u043c \u0435\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \t\t \t \t \t\t \t \t \/\/\u043d\u0430\u0445\u043e\u0434\u0438\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u0431\u0443\u043a\u0432\u0430 n \u043d\u0443\u0436\u043d\u0430 \u0434\u043b\u044f \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 id \t\t \t \t var answer = my_all_data[&quot;n&quot;+id];  \t\t \t \t if(!answer) return false; \/\/\u0435\u0441\u043b\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435 \u043d\u0435\u0442 \t\t \t  \t\t \t \t if(changes) { \/\/\u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e \u0432\u043d\u0435\u0441\u0442\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f, \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u043c \u0438\u0445 \u043f\u043e \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \t\t\t \t \t $.each(changes, function(name_field, new_field_value){ \t\t\t\t \t \t answer[name_field] = new_field_value; \t\t\t \t \t }); \t\t       \t\t  \t\t       \t\t db.put(&quot;mindmap_db&quot;, answer ).done(function(){ \/\/\u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0431\u0430\u0437\u0435 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 \t\t       \t\t \tconsole.info(&quot;\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u044b \u0432 \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430&quot;); \/\/\u0432\u044b\u0432\u043e\u0434\u0438\u043c \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 \t\t       \t\t }); \t\t\t \t \t  \t\t \t \t } \t\t\t \t return answer; \t\t \t } \t\t \t  \t\t \t this.jsFindByParent = function(parent_id) { \/\/\u043f\u043e\u0434\u0431\u0438\u0440\u0430\u0435\u043c \u0432\u0441\u0435\u0445 \u0434\u0435\u0442\u0435\u0439 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044f parent_id \t\t \t \t var answer = []; \t\t\t \t $.each(my_all_data, function(i,el){ \/\/\u0444\u0438\u043b\u044c\u0442\u0440\u0443\u0435\u043c \u0432\u0441\u0435 \u043d\u0435\u0443\u0434\u0430\u043b\u0451\u043d\u043d\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0441 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u0435\u043c = parent_id \t\t\t\t \tif((el.parent_id == parent_id) && (!el.del)) answer.push(el); \t\t\t \t }); \t\t\t \t return answer; \t\t \t } \t\t \t  \t\t \t this.jsAddNew = function(parent_id, title) { \/\/\u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u043e\u0432\u043e\u0433\u043e \u0440\u0435\u0431\u0451\u043d\u043a\u0430 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044e parent_id \t\t \t \tvar max_id = 0; \t\t \t \t$.each(my_all_data, function(i,el){ \/\/\u043d\u0430\u0445\u043e\u0434\u0438\u043c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 id \t\t\t \t \tif(el.id&gt;max_id) max_id = el.id; \t\t \t \t}); \t\t \t \tvar new_id = (parseInt(max_id)+1); \/\/\u043d\u043e\u0432\u044b\u0439 \u043d\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 id \t\t \t \tmy_all_data[&quot;n&quot;+new_id] = {}; \/\/\u0441\u043e\u0437\u0434\u0430\u0451\u043c \u043d\u043e\u0432\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \t\t \t \tmy_all_data[&quot;n&quot;+new_id] = {id:new_id, parent_id: parent_id, title: title}; \/\/\u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u043c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \t\t \t \t \t\t \t \treturn new_id; \t\t\t } \t\t\t  \t\t \t \/\/\u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e \u043f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u0435\u0442 \u0412\u0421\u0415\u0425 \u0434\u0435\u0442\u0435\u0439, \u0432\u043d\u0443\u043a\u043e\u0432 \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435 \t\t \t this.jsRecursiveByParent = function(id, recursive_array) { \t\t \t   if(!recursive_array) recursive_array = []; \t\t \t    \t\t \t   var answer = this_api.jsFindByParent(id); \t\t \t    \t\t \t   $.each(answer,function(i,el) { \/\/\u043e\u0431\u0445\u043e\u0434\u0438\u043c \u0432\u0441\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u0441\u0430\u043c\u0438 \u0441\u0435\u0431\u044f, \u043f\u043e\u043a\u0430 \u0435\u0441\u0442\u044c \u0434\u0435\u0442\u0438 \t\t \t   \t   recursive_array.push(el); \t\t \t       recursive_array = this_api.jsRecursiveByParent(el.id, recursive_array); \t\t \t   }); \t\t \t return recursive_array; \t\t \t } \t\t \t   \t\t \t this.jsDeleteById = function(id) { \/\/\u0443\u0434\u0430\u043b\u044f\u0435\u043c \u0432\u0441\u0435\u0445 \u0434\u0435\u0442\u0435\u0439 \u0438 \u043f\u043e\u0442\u043e\u043c\u043a\u043e\u0432 \u044d\u0442\u043e\u0433\u043e \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044f \t\t \t \t if(confirm(&quot;\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u2116&quot;+id+&quot; \u0438 \u0435\u0433\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435?&quot;)) { \t\t \t \t \tvar childs = this_api.jsRecursiveByParent(id); \t\t \t \t \t$.each(childs, function(i, el){ \t\t \t \t \t\tapi4mindmap.jsFind(el.id, {del:1}); \/\/&quot;\u0434\u0436\u0438\u0445\u0430\u0434&quot; - \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0443\u0434\u0430\u043b\u044f\u0435\u043c \u0434\u0435\u0442\u0435\u0439 \u0438 \u0432\u0441\u0435\u0445 \u043f\u043e\u0442\u043e\u043c\u043a\u043e\u0432 \t\t \t \t \t}); \t\t \t \t \tif(id!=1) api4mindmap.jsFind(id, {del:1}); \/\/\u043f\u043e\u0442\u043e\u043c \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044f, \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u043d\u0435 \u21161 \t\t \t \t } \t\t \t } \t\t \t  \t\t \t this.jsRenderAllMap = function(focus_id) { \/\/\u0432\u044b\u0432\u043e\u0434\u0438\u043c \u0432\u0441\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043a\u0430\u0440\u0442\u044b \u043d\u0430 \u044d\u043a\u0440\u0430\u043d \t\t \t \t if(!focus_id) focus_id = 1; \t\t\t \t var html = &quot;&lt;ul myid='&quot;+focus_id+&quot;'&gt;&quot;; \t\t\t \t html = this_api.jsRenderOneParent(focus_id, html); \/\/\u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \t\t\t \t html += &quot;&lt;\/ul&gt;&quot;; \t\t\t \t $(&quot;#mindmap&quot;).html(html); \t\t\t \t jsMakeDroppable(); \/\/\u0434\u0435\u043b\u0430\u0435\u043c \u043d\u043e\u0432\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043f\u0435\u0440\u0435\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u0435\u043c\u044b\u043c\u0438 \t\t \t } \t\t \t  \t\t \t this.jsRenderOneParent = function(parent_id, html) { \/\/\u0440\u0438\u0441\u0443\u0435\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0438 \u0432\u0441\u0435\u0445 \u043f\u043e\u0442\u043e\u043c\u043a\u043e\u0432 \t\t\t \t html += &quot;&lt;li id='node_&quot;+parent_id+&quot;' myid='&quot;+parent_id+&quot;'&gt;&quot;; \t\t\t \t html += &quot;&lt;div class='big_n_title'&gt;&quot;; \t\t\t \t html += this_api.jsRenderOneElement(parent_id); \/\/\u0440\u0438\u0441\u0443\u0435\u043c \u0441\u0430\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \t\t\t \t html += &quot;&lt;\/div&gt;&quot;; \t\t\t \t  \t\t\t \t var childs = this_api.jsFindByParent(parent_id); \/\/\u043f\u043e\u0434\u0431\u0438\u0440\u0430\u0435\u043c \u0432\u0441\u0435\u0445 \u0434\u0435\u0442\u0435\u0439 \t\t\t \t if(childs.length) { \t\t\t\t \t html += &quot;&lt;ul class='childs' myid='&quot;+parent_id+&quot;'&gt;&quot;; \t\t\t \t } \t\t\t \t $.each(childs, function(i,el){ \t\t\t\t \thtml = this_api.jsRenderOneParent(el.id,html); \/\/\u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u0441\u0430\u043c\u0438 \u0441\u0435\u0431\u044f, \u043f\u043e\u043a\u0430 \u0435\u0441\u0442\u044c \u0434\u0435\u0442\u0438 \t\t\t \t }); \t\t\t \t if(childs.length) { \t\t\t\t \t html += &quot;&lt;\/ul&gt;&quot;; \t\t\t \t } \t\t\t \t  \t\t\t \t html += &quot;&lt;\/li&gt;&quot;; \t\t\t \t return html; \t\t \t } \t\t \t  \t\t \t  \t\t \t this.jsRenderOneElement = function(id) { \/\/\u0440\u0438\u0441\u0443\u0435\u043c \u043e\u0434\u0438\u043d \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \t\t \t \t var element = this_api.jsFind(id); \/\/\u0441\u0430\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \t\t \t \t var childs_count = this_api.jsFindByParent(id).length; \/\/\u043a\u043e\u043b-\u0432\u043e \u0434\u0435\u0442\u0435\u0439 \u0443 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430  \t\t \t \t var icon_type = ''; \t\t \t \t if(element.icon) icon_type = element.icon; \/\/\u0435\u0441\u043b\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0430 \u0438\u043a\u043e\u043d\u043a\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0435\u0451 \t\t \t \t  \t\t \t \t if(childs_count&gt;0) { \/\/\u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u043f\u0430\u043f\u043a\u0430 \t\t \t \t \tvar collapser_html = &quot;&lt;div class='collapse'&gt;&lt;\/div&gt;&quot;; \/\/\u043a\u0440\u0443\u0433\u043b\u044b\u0439 \u043c\u0438\u043d\u0443\u0441 \u0438\u043b\u0438 \u043f\u043b\u044e\u0441, \u0434\u043b\u044f \u0441\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f \t\t\t \t \tvar icon = &quot;&lt;div class='type_icon'&gt;&lt;i class='icon-folder-1 folder'&gt;&lt;div class='count'&gt;&quot;+ \t\t\t \t \t\tchilds_count+&quot;&lt;\/div&gt;&lt;\/i&gt;&lt;i class='&quot;+icon_type+&quot;'&gt;&lt;\/i&gt;&quot;+&quot;&lt;\/div&gt;&quot;; \t\t \t \t } else { \t\t\t \t \tvar collapser_html = &quot;&quot;; \t\t\t \t \tvar icon = &quot;&lt;div class='type_icon'&gt;&lt;i class='&quot;+icon_type+&quot;'&gt;&lt;\/i&gt;&lt;\/div&gt;&quot;; \t\t \t \t } \t\t \t \t  \t\t\t \t var answer = icon+&quot;&lt;div class='n_title' contenteditable='true'&gt;&quot;+element.title+ \t\t\t \t \t\t\t       &quot;&lt;\/div&gt;&lt;div class='contextmenu'&gt;&lt;\/div&gt;&quot;+collapser_html; \t\t\t \t return answer;  \t\t \t } \t\t   \t \t \t\t\t this.jsDrawMindmap = function(focus_id) { \/\/\u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0440\u0438\u0441\u0443\u0435\u0442 \u043b\u0438\u043d\u0438\u0438 \u043c\u0435\u0436\u0434\u0443 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \t\t\t  \t\t\t    var line_cache = []; \t\t\t     \t\t\t    $(&quot;#mindmap ul:visible&quot;).each(function(){ \/\/\u0438\u0441\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0441\u0432\u0451\u0440\u043d\u0443\u0442\u044b\u0435 \u0441\u043f\u0438\u0441\u043a\u0438 ul \t\t\t    \tvar ul_id = $(this).attr(&quot;myid&quot;); \t\t\t    \tvar childs = this_api.jsFindByParent(ul_id);  \t\t\t     \t$.each(childs, function(i,el){ \/\/\u0434\u043b\u044f \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u0441\u0442\u0438, \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043c\u0430\u0441\u0441\u0438\u0432 \u043d\u0443\u0436\u043d\u044b\u0445 \u043b\u0438\u043d\u0438\u0439 \t\t\t    \t \tvar target = el.id; \t\t\t    \t \tif(!$(&quot;li[myid='&quot;+target+&quot;']&quot;+&quot; .big_n_title:first&quot;).hasClass(&quot;_jsPlumb_endpoint_anchor_&quot;)) { \t\t\t    \t\t \tvar parent_id = el.parent_id; \t\t\t    \t\t \tline_cache.push( {source: parent_id, target: target} ); \t\t\t    \t \t} \t\t\t     \t}); \t\t\t    }); \t\t\t     \t\t\t    if(line_cache.length) { \/\/\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u043b\u0438\u043d\u0438\u0439, \u0447\u0442\u043e\u0431\u044b \u0432\u0441\u0451 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u043b\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \t\t\t     \tif(!myjsPlumb.isSuspendDrawing()) { \t\t\t     \t\tmyjsPlumb.setSuspendDrawing(true, true); \t\t\t     \t\tconsole.info(&quot;set_suspend&quot;); \t\t\t     \t} \t\t\t    } \t\t\t     \t\t\t     \t\t\t    $.each(line_cache, function(i, el){ \t\t\t\t       \t\t\t\t      if(el.source == 1) { \/\/\u0443 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u043b\u0438\u043d\u0438\u044f \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u044b \u0432\u044b\u0441\u043e\u0442\u044b \t\t\t\t      \tanchor1 = [ 1, 0.5, 1, 0, -1, -1 ]; \t\t\t\t      } else { \t\t\t\t      \tanchor1 = [ 1, 1, 1, 0, -1, -1 ]; \/\/\u043b\u0438\u043d\u0438\u044f \u0438\u0434\u0451\u0442 \u0441 \u043d\u0438\u0437\u0430 \t\t\t\t      } \t\t\t     \t\t\t\t\t  \/\/\u043f\u0435\u0440\u0432\u0430\u044f \u0442\u043e\u0447\u043a\u0430 \u0434\u043b\u044f \u043b\u0438\u043d\u0438\u0438: \t\t    \t      var p1 = myjsPlumb.addEndpoint(&quot;node_&quot;+el.source+&quot; .big_n_title:first&quot;,  \t\t    \t      \t\t                        { anchor: anchor1 });\t\t\t    \t       \t\t    \t      \/\/\u0432\u0442\u043e\u0440\u0430\u044f \u0442\u043e\u0447\u043a\u0430 \u0434\u043b\u044f \u043b\u0438\u043d\u0438\u0438:\t\t                         \t\t    \t      var p2 = myjsPlumb.addEndpoint(&quot;node_&quot;+el.target+&quot; .big_n_title:first&quot;,  \t\t    \t      \t\t\t\t\t\t\t\t{ anchor: [ 0, 1, -1, 0, 1, -1 ]}); \t\t\t\t\t  \/\/\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u0435\u0442\u0435\u0439 \u0443 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430: \t\t\t\t\t  var count = this_api.jsFindByParent(el.source).length;  \t\t\t\t\t  if(count&gt;10) { \/\/\u0435\u0441\u043b\u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u0434\u0435\u0441\u044f\u0442\u0438, \u0442\u043e \u043b\u0438\u043d\u0438\u0438 \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u044f\u043c\u044b\u043c\u0438 \t\t\t    \t      var LineType = &quot;Straight&quot;; \t\t\t\t\t  } else { \t\t\t    \t      var LineType = &quot;Bezier&quot;; \/\/\u043a\u0440\u0438\u0432\u0430\u044f \u043b\u0438\u043d\u0438\u044f \u0411\u0435\u0437\u044c\u0435 \t\t\t\t\t  } \t\t\t    \t   \t\t\t    \t  \/\/\u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u043c \u0434\u0432\u0435 \u0442\u043e\u0447\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043b\u0438 \u0432\u044b\u0448\u0435   \t\t\t  \t\t  myjsPlumb.connect({source: p1, target: p2, scope:&quot;someScope&quot;,  \t\t\t  \t\t  \t\t\t\t\tdeleteEndpointsOnDetach:true, connector:[ LineType,  \t\t\t  \t\t  \t\t\t\t\t{ curviness: 30, cornerRadius: 20 } ]}); \t\t\t   }); \t\t\t } \/\/jsDrawMindmap \t\t   \t \t \t\t   \t this.jsRefreshMindmap = function() { \/\/\u0431\u044b\u0441\u0442\u0440\u043e\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0439 \u043a\u0430\u0440\u0442\u044b \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 \u0441 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \t\t   \t \t myjsPlumb.reset(); \/\/\u0441\u0442\u0438\u0440\u0430\u0435\u043c \u0432\u0441\u0435 \u043b\u0438\u043d\u0438\u0438 \t\t   \t \t var save_scroll_top = $(&quot;#mindmap&quot;).scrollTop();  \/\/\u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0441\u043a\u0440\u043e\u043b\u043b\u0438\u043d\u0433\u0430, \u0447\u0442\u043e\u0431\u044b \u0432\u0435\u0440\u043d\u0443\u0442\u044c \t\t   \t \t var save_scroll_left = $(&quot;#mindmap&quot;).scrollLeft();\/\/\u0432\u0441\u0451 \u043a\u0430\u043a \u0431\u044b\u043b\u043e \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u0440\u0435\u0438\u0441\u043e\u0432\u043a\u0438 \t\t   \t \t  \t\t   \t \t var hidden_elements = []; \/\/\u043c\u0430\u0441\u0441\u0438\u0432 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0441\u0432\u0451\u0440\u043d\u0443\u0442\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \t\t   \t \t  \t\t   \t \t $(&quot;.hide&quot;).each(function(){ \t\t\t   \t \thidden_elements.push($(this).attr(&quot;myid&quot;)); \t\t   \t \t }); \t\t   \t \t  \t\t\t   \t api4mindmap.jsRenderAllMap(1); \/\/\u043f\u0435\u0440\u0435\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0435\u043c \u0432\u0441\u044e \u043a\u0430\u0440\u0442\u0443 \u0437\u0430\u043d\u043e\u0432\u043e  \t\t   \t \t $.each(hidden_elements, function(i, el){ \/\/\u0441\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u044b\u043b\u0438 \u0441\u043a\u0440\u044b\u0442\u044b \u0434\u043e. \t\t\t   \t \t$(&quot;#node_&quot;+el).addClass(&quot;hide&quot;); \t\t   \t \t }); \t\t   \t \t  \t\t   \t \t api4mindmap.jsDrawMindmap(1);  \/\/\u043d\u0430\u043c\u0435\u0447\u0430\u0435\u043c \u043b\u0438\u043d\u0438\u0438, \u0432\u0437\u044f\u0432 \u0432\u0438\u0434\u0438\u043c\u044b\u0435 \u0443\u0437\u043b\u044b \u0441 \u044d\u043a\u0440\u0430\u043d\u0430 \t\t   \t \t onResize(); \/\/\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0443 \u0437\u0430\u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043b\u0438\u043d\u0438\u0439 \t\t   \t \t  \t\t   \t \t $(&quot;#mindmap&quot;).scrollTop(save_scroll_top);  \/\/\u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0441\u043a\u0440\u043e\u043b\u043b\u0438\u043d\u0433\u0430, \u0447\u0442\u043e\u0431\u044b \u0432\u0435\u0440\u043d\u0443\u0442\u044c \t\t   \t \t $(&quot;#mindmap&quot;).scrollLeft(save_scroll_left);\/\/\u0432\u0441\u0451 \u043a\u0430\u043a \u0431\u044b\u043b\u043e \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u0440\u0435\u0438\u0441\u043e\u0432\u043a\u0438  \t\t   \t } \t\t   \t \t \t\t \t this.jsRegAllKeys = function() { \/\/\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u043c \u043a\u043b\u0438\u043a\u0438 \u0432 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b  \t\t\t \t $(&quot;#mindmap&quot;).on(&quot;keydown&quot;, &quot;.n_title&quot;, function(e){ \/\/\u043e\u0442\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043d\u0430\u0436\u0430\u0442\u0438\u044f Enter \t\t\t\t\t  \t\t\t \t \t if(e.keyCode==13) { \t\t\t\t \t \te.preventDefault(); \t\t\t \t \t \t$(this).blur(); \/\/\u0443\u0432\u043e\u0434\u0438\u043c \u0444\u043e\u043a\u0443\u0441, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u043e\u043c \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0442\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u0435 \t\t\t \t \t } \t\t\t \t });  \t\t\t \t $(&quot;#mindmap&quot;).on(&quot;keyup&quot;, &quot;.n_title&quot;, function(e){ \t\t\t\t\t e.preventDefault(); \t\t\t \t \t if(e.keyCode==13) $(this).blur();  \t\t\t\t \t onResize(); \/\/\u043f\u0435\u0440\u0435\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0435\u043c \u043b\u0438\u043d\u0438\u0438, \u0442\u0430\u043a \u043a\u0430\u043a \u0432\u0441\u0451, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0441\u0434\u0432\u0438\u043d\u0443\u043b\u043e\u0441\u044c \t\t\t \t });  \t\t\t \t $(&quot;#mindmap&quot;).on(&quot;blur&quot;, &quot;.n_title&quot;, function(){ \/\/\u043f\u0440\u0438 \u0443\u0432\u043e\u0434\u0435 \u0444\u043e\u043a\u0443\u0441\u0430, \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \t\t\t \t \t var n_title_text = $(this).html(); \t\t\t \t \t var id = $(this).parents(&quot;li:first&quot;).attr(&quot;myid&quot;); \t\t\t \t \t if(n_title_text.length==0) n_title_text = &quot;\u041d\u043e\u0432\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442&quot;; \/\/\u0435\u0441\u043b\u0438 \u0432\u0441\u0451 \u0441\u0442\u0451\u0440\u043b\u0438, \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u043f\u043e \u0443\u043c\u043e\u043b\u0447. \t\t\t \t \t $(this).html( strip_tags(n_title_text) ); \/\/\u0443\u0431\u0438\u0440\u0430\u0435\u043c \u0442\u0435\u0433\u0438 \u0438 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u044b \u0441\u0442\u0440\u043e\u043a \t\t\t \t \t this_api.jsFind(id, {title:n_title_text}); \/\/\u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u043d\u043e\u0432\u044b\u0439 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435 \u0438 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \t\t\t\t \t onResize(); \/\/\u043f\u0435\u0440\u0435\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0435\u043c \u043b\u0438\u043d\u0438\u0438 \t\t\t \t });  \t\t\t \t $(&quot;#mindmap&quot;).on(&quot;click&quot;, &quot;.n_title&quot;, function(){ \/\/\u043f\u0440\u0438 \u043a\u043b\u0438\u043a\u0435 \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a, \u0444\u043e\u043a\u0443\u0441\u0438\u0440\u0443\u0435\u043c\u0441\u044f \t\t\t \t \t$(this).focus(); \t\t\t \t });  \t\t\t \t $(&quot;#mindmap&quot;).on(&quot;focus&quot;, &quot;.n_title&quot;, function(){ \/\/\u043f\u0440\u0438 \u0444\u043e\u043a\u0443\u0441\u0435, \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u043c \u0432\u0435\u0441\u044c \u0442\u0435\u043a\u0441\u0442 \t\t\t \t \tvar ntitle = $(this);  \t \t\t \t  \tsetTimeout(function(){  \t\t \t  \t\tif(ntitle.is(&quot;:focus&quot;)) document.execCommand('selectAll',false,null);  \t\t \t  \t\t},3); \/\/\u043d\u0443\u0436\u043d\u0430 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u043f\u0435\u0440\u0435\u0434 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435\u043c \u0432\u0441\u0435\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u0430 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f Firefox  \t\t\t \t }); \t\t\t \t  \t\t\t \t $(&quot;#mindmap&quot;).on(&quot;click&quot;, &quot;.collapse&quot;, function(){ \/\/\u043f\u0440\u0438 \u0441\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0438 \u0438 \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0438 \u0443\u0437\u043b\u043e\u0432 \t\t\t \t \t$(this).parents(&quot;li:first&quot;).toggleClass(&quot;hide&quot;); \/\/\u0438\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u0435\u0442 \u043a\u043b\u0430\u0441\u0441 \t\t\t \t \tapi4mindmap.jsDrawMindmap(1);  \/\/\u0434\u043e\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0435\u043c \u043b\u0438\u043d\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0435\u0442 \t\t\t \t \tonResize(); \t\t\t \t \treturn false; \t\t\t \t });  \t\t\t \t var font_size = 14; \/\/\u0448\u0440\u0438\u0444\u0442 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \t\t\t \t $(&quot;#zoom_in&quot;).on(&quot;click&quot;, function(){ \/\/\u043a\u043d\u043e\u043f\u043a\u0430 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u044f \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0430 \t\t\t \t \tfont_size += 1; \t\t\t \t \t$(&quot;#mindmap&quot;).css(&quot;font-size&quot;, font_size+&quot;px&quot;); \t\t\t \t \tonResize(); \t\t\t \t \treturn false; \t\t\t \t }); \t\t\t \t $(&quot;#zoom_out&quot;).on(&quot;click&quot;, function(){ \/\/\u043a\u043d\u043e\u043f\u043a\u0430 \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u044f \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0430 \t\t\t \t \tfont_size -= 1; \t\t\t \t \t$(&quot;#mindmap&quot;).css(&quot;font-size&quot;, font_size+&quot;px&quot;); \t\t\t \t \tonResize(); \t\t\t \t \treturn false; \t\t\t \t }); \t\t\t \t  \t\t\t \t $(&quot;#collapse_all&quot;).on(&quot;click&quot;, function(){ \/\/\u043a\u043d\u043e\u043f\u043a\u0430 &quot;\u0441\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0432\u0441\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b&quot; \t\t\t \t \t$(&quot;#node_1 ul li&quot;).addClass(&quot;hide&quot;); \t\t\t \t \tonResize(); \t\t\t \t \treturn false; \t\t\t \t });  \t\t\t \t $(&quot;#expand_all&quot;).on(&quot;click&quot;, function(){ \/\/\u043a\u043d\u043e\u043f\u043a\u0430 &quot;\u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0432\u0441\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b&quot; \t\t\t \t \t$(&quot;#node_1 ul li&quot;).removeClass(&quot;hide&quot;);  \t\t\t \t \tonResize(); \t\t\t \t \treturn false; \t\t\t \t }); \t\t\t \t   \t\t \t } \/\/jsRegAllKeys \t\t   \t \t \t\t   \t \t \t\t }      }      return arguments.callee.instance; \/\/\u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u0432\u0441\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 }  function onResize() { \tmyjsPlumb.setSuspendDrawing(false, true); \/\/\u043f\u0435\u0440\u0435\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0435\u0442 \u0437\u0430\u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043b\u0438\u043d\u0438\u0438 }  function jsGetIcons(n) { \/\/\u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u043c\u043d\u043e\u0433\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u043e\u0435 \u043c\u0435\u043d\u044e \u0438\u043a\u043e\u043d\u043e\u043a \tvar icons = {}; \t     icons[0] = [&quot;progress-0&quot;,&quot;progress-1&quot;,&quot;progress-2&quot;,&quot;progress-3&quot;,&quot;dot&quot;,&quot;dot-2&quot;,&quot;dot-3&quot;,&quot;star-empty&quot;,&quot;star&quot;,&quot;record&quot;];     icons[1] = [&quot;check&quot;,&quot;heart-empty&quot;,&quot;heart&quot;,&quot;bookmark-empty&quot;,&quot;bookmark&quot;,&quot;ok-2&quot;,&quot;help&quot;,&quot;wallet&quot;,&quot;mail-2&quot;,&quot;cloud&quot;];     icons[2] = [&quot;tree&quot;,&quot;chat-2&quot;,&quot;article-alt&quot;,&quot;volume&quot;,&quot;flash&quot;,&quot;aperture-alt&quot;,&quot;layers&quot;,&quot;steering-wheel&quot;,&quot;skiing&quot;,&quot;flight&quot;];     icons[3] = [&quot;lock-open&quot;,&quot;lock&quot;,&quot;umbrella&quot;,&quot;camera&quot;,&quot;book-open&quot;,&quot;clock-1&quot;,&quot;plus&quot;,&quot;minus&quot;,&quot;trash&quot;,&quot;music&quot;];     icons[4] = [&quot;calculator&quot;,&quot;address&quot;,&quot;pin&quot;,&quot;vcard&quot;,&quot;basket-1&quot;,&quot;swimming&quot;,&quot;youtube&quot;,&quot;leaf&quot;,&quot;mic&quot;,&quot;target&quot;];     icons[5] = [&quot;monitor&quot;,&quot;phone&quot;,&quot;download&quot;,&quot;bell&quot;,&quot;at&quot;,&quot;pause&quot;,&quot;play&quot;,&quot;stop-1&quot;,&quot;flag&quot;,&quot;key&quot;];     icons[6] = [&quot;users-1&quot;,&quot;eye&quot;,&quot;inbox&quot;,&quot;brush&quot;,&quot;moon&quot;,&quot;college&quot;,&quot;fast-food&quot;,&quot;coffee&quot;,&quot;top-list&quot;,&quot;bag&quot;];     icons[7] = [&quot;chart-area&quot;,&quot;info&quot;,&quot;home-1&quot;,&quot;hourglass&quot;,&quot;attention&quot;,&quot;scissors&quot;,&quot;tint&quot;,&quot;guidedog&quot;,&quot;archive&quot;,&quot;flow-line&quot;];     icons[8] = [&quot;emo-grin&quot;,&quot;emo-happy&quot;,&quot;emo-wink&quot;,&quot;emo-sunglasses&quot;,&quot;emo-thumbsup&quot;,&quot;emo-sleep&quot;,&quot;emo-unhappy&quot;,&quot;emo-devil&quot;,&quot;emo-surprised&quot;,&quot;emo-tongue&quot;];     icons[9] = [&quot;plus&quot;,&quot;minus&quot;,&quot;keyboard&quot;,&quot;fast-fw&quot;,&quot;to-end&quot;,&quot;to-start&quot;,&quot;cancel-circle&quot;,&quot;check&quot;,&quot;flash&quot;,&quot;feather&quot;];     icons[10] = [&quot;plus-circle&quot;,&quot;pencil-alt&quot;,&quot;target-1&quot;,&quot;chart-pie&quot;,&quot;adjust&quot;,&quot;user-add&quot;,&quot;volume&quot;,&quot;install&quot;,&quot;flow-cascade&quot;,&quot;sitemap&quot;];     icons[11] = [&quot;minus-circle&quot;,&quot;clock-1&quot;,&quot;light-down&quot;,&quot;light-up&quot;,&quot;lamp&quot;,&quot;upload&quot;,&quot;picture-2&quot;,&quot;dollar&quot;,&quot;gift&quot;,&quot;link-1&quot;]; \t\t\t \tanswer = {};\t  \t$.each(icons, function(j, icon_group){ \t\tsub_icons = {}; \t\t$.each(icons[j], function(i, icon){ \t\t\tsub_icons[&quot;icon-&quot;+icon] = {}; \t\t\tsub_icons[&quot;icon-&quot;+icon] = {name:icon, icon: &quot;icon-&quot;+icon}; \t\t});  \t\tanswer[&quot;icon-group&quot;+icon_group]\t= {}; \t\tanswer[&quot;icon-group&quot;+icon_group]\t= {name:&quot;\u041d\u0430\u0431\u043e\u0440 \u2116&quot;+(parseInt(j)+1), icon: &quot;icon-&quot;+icons[j][0], items: sub_icons}; \t\t \t});\t \t\t\t \treturn answer; \/\/\u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u043e\u0433\u043e \u043c\u0435\u043d\u044e }  function jsMakeDroppable() { \/\/\u0434\u0435\u043b\u0430\u0435\u043c \u0432\u0441\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043f\u0435\u0440\u0435\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u0435\u043c\u044b\u043c\u0438  \t\t$(&quot;.n_title&quot;).not(&quot;ui-draggable&quot;).draggable({ \t\t\t\tzIndex: 999, \t\t\t\tdelay:50, \t\t\t\trevert: false,      \/\/ will cause the event to go back to its \t\t\t\thelper:&quot;clone&quot;, \t\t\t\tappendTo: &quot;body&quot;, \t\t\t\trefreshPositions:true \t\t\t});  \t\t$( &quot;.n_title&quot; ).not(&quot;ui-droppable&quot;).droppable({ \t\t\taccept: &quot;.n_title&quot;, \t\t\tactiveClass: &quot;ui-can-recieve&quot;, \t\t\ttolerance: &quot;pointer&quot;, \t\t\thoverClass: &quot;ui-can-hover&quot;, \t\t\tover: function (event, ui) { \t\t\t\t\/\/$(this).click(); \t\t\t\t},             drop: function( event, ui ) {             \t\/\/console.info(&quot;drop-all&quot;,usedOverlays,ui,ui.draggable[0] );             \t             \tvar my_draggable = $(ui.draggable[0]);             \tvar my_droppable = $(event.target);             \t             \tmy_draggable_id = my_draggable.parents(&quot;li:first&quot;).attr(&quot;myid&quot;);             \tmy_droppable_id = my_droppable.parents(&quot;li:first&quot;).attr(&quot;myid&quot;);             \t             \tif( jsCanDrop(my_draggable_id, my_droppable_id) ) { \/\/\u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0447\u0442\u043e\u0431\u044b \u043d\u0435\u0431\u044b\u043b\u043e \u0437\u0430\u0446\u0438\u043a\u043b\u0438\u0432\u0430\u043d\u0438\u0439 \t\t\t\t\tapi4mindmap.jsFind(my_draggable_id, {parent_id:my_droppable_id}); \t\t\t\t\tapi4mindmap.jsRefreshMindmap(); \t   \t\t\t\t$(&quot;.ui-draggable-dragging&quot;).remove(); \/\/\u0443\u0434\u0430\u043b\u044f\u0435\u043c \u043a\u043b\u043e\u043d \u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0435\u0440\u0435\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u043b\u0438              \t} else { \t\t\t\t\talert(&quot;\u041d\u0435 \u043c\u043e\u0433\u0443 \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0432\u043d\u0443\u0442\u0440\u044c \u0441\u0430\u043c\u043e\u0433\u043e \u0441\u0435\u0431\u044f&quot;);             \t}             \t \t\t\t\t} \t\t\t});  }  function jsCanDrop(draggable_id, droppable_id) { \/\/\u043f\u0440\u0435\u0434\u043e\u0442\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u0437\u0430\u0446\u0438\u043a\u043b\u0438\u0432\u0430\u043d\u0438\u0435, \u0447\u0442\u043e\u0431\u044b \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c \u043d\u0435 \u0431\u044b\u043b \u0432\u043d\u0443\u043a\u043e\u043c \u0441\u0432\u043e\u0438\u0445 \u0434\u0435\u0442\u0435\u0439 \tvar can_drop = true; \tvar all_childs = api4mindmap.jsRecursiveByParent(my_draggable_id); \t$.each(all_childs, function(i,el){ \t\tconsole.info(el.id, droppable_id); \t\tif(el.id == droppable_id)  \t\t\tcan_drop = false; \t}); \t \tif(draggable_id == droppable_id) var can_drop = false; \t \treturn can_drop; }  \/\/ \u0447\u0438\u0441\u0442\u0438\u043c \u0432\u0432\u043e\u0434 \u0442\u0435\u043a\u0441\u0442\u0430 \u043e\u0442 \u0442\u0435\u0433\u043e\u0432 function strip_tags( str ){\t \tif(!str) return &quot;&quot;; \tanswer = str.replace(\/&lt;\\\/?[^&gt;]+&gt;\/gi, ''); \tanswer = answer.replace(\/\\n\/gi, ''); \treturn answer; }  var myjsPlumb; \/\/\u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u0434\u043b\u044f \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 html \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/ function jsDoFirst() {  \tapi4mindmap = new API_4_MINDMAP(); \/\/\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u043c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 api \u0438\u0437 &quot;\u0441\u0438\u043d\u0433\u043b\u0442\u043e\u043d\u0430&quot;  \tjsPlumb.Defaults.Container = $(&quot;#mindmap&quot;); \/\/\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b &quot;\u0440\u0438\u0441\u043e\u0432\u0430\u043b\u044c\u0449\u0438\u043a\u0430&quot; \u043b\u0438\u043d\u0438\u0439     myjsPlumb = jsPlumb.getInstance({     \tDragOptions: { cursor: 'pointer', zIndex: 2000 },     \tPaintStyle:{      \t  lineWidth:1,      \t  strokeStyle:&quot;#888&quot;     \t},     \tConnector:[ &quot;Bezier&quot;, { curviness: 30 } ],     \tEndpoint:[ &quot;Blank&quot;, { radius:5 } ],     \tEndpointStyle : { fillStyle: &quot;#567567&quot;  },     \tAnchors : [[ 1, 1, 1, 0, -1, -1 ],[ 0, 1, -1, 0, 1, -1 ]]     });          var icons_html = jsGetIcons(0); \/\/\u0431\u0435\u0440\u0451\u043c \u0432\u0441\u0435 \u0438\u043a\u043e\u043d\u043a\u0438 \u0438 \u0438\u0445 \u0433\u0440\u0443\u043f\u043f\u044b \u0434\u043b\u044f \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u043e\u0433\u043e \u043c\u0435\u043d\u044e  \t$.contextMenu({ \/\/\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u043e\u0435 \u043c\u0435\u043d\u044e \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0438 \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0435\u043c \u043d\u0430 \u043b\u0435\u0432\u044b\u0439 \u043a\u043b\u0438\u043a \u0432 .contextmenu         selector: '.contextmenu',          trigger: 'left',         callback: function(key, options) {         \tvar id = $(this).parents(&quot;li:first&quot;).attr(&quot;myid&quot;);             if( \/icon-\/ig.test(key) ) { \/\/\u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0435\u043c \u0438\u043a\u043e\u043d\u043a\u0443             \tapi4mindmap.jsFind(id, {icon:key}); \t            api4mindmap.jsRefreshMindmap();             } else if(key == &quot;delete&quot;) { \/\/\u0443\u0434\u0430\u043b\u044f\u0435\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0438 \u043f\u043e\u0442\u043e\u043c\u043a\u043e\u0432 \t           api4mindmap.jsDeleteById(id); \t           api4mindmap.jsRefreshMindmap(id);             } else if(key == &quot;add_down&quot;) { \/\/\u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432\u043d\u0438\u0437             \tvar parent_id = api4mindmap.jsFind(id).parent_id; \t            var new_id = api4mindmap.jsAddNew(parent_id, &quot;\u041d\u043e\u0432\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442&quot;); \t            api4mindmap.jsRefreshMindmap(); \t            $(&quot;#node_&quot;+new_id+&quot; .n_title&quot;).focus();             } else if(key == &quot;add_right&quot;) { \/\/\u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432\u043d\u0443\u0442\u0440\u044c \t            var new_id = api4mindmap.jsAddNew(id, &quot;\u041d\u043e\u0432\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442&quot;); \t            $(this).parents(&quot;li&quot;).removeClass(&quot;hide&quot;); \t            api4mindmap.jsRefreshMindmap(); \t            $(&quot;#node_&quot;+new_id+&quot; .n_title&quot;).focus();             }         },         delay:0,         items: {         \t&quot;add_down&quot;: {&quot;name&quot;:&quot;\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432\u043d\u0438\u0437&quot;, &quot;icon&quot;: &quot;icon-down-1&quot;},         \t&quot;add_right&quot;: {&quot;name&quot;:&quot;\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432\u043f\u0440\u0430\u0432\u043e&quot;, &quot;icon&quot;: &quot;icon-right-1&quot;},         \t&quot;sep1&quot;: &quot;--------&quot;,         \t&quot;delete&quot;: {&quot;name&quot;:&quot;\u0423\u0434\u0430\u043b\u0438\u0442\u044c&quot;, &quot;icon&quot;: &quot;icon-trash&quot;},             &quot;context_make_did1011&quot;: {&quot;name&quot;: &quot;\u0418\u043a\u043e\u043d\u043a\u0430&quot;, &quot;icon&quot;: &quot;icon-emo-wink&quot;,  \t            &quot;items&quot;: icons_html \/\/\u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u0443\u043d\u043a\u0442\u044b \u043c\u0435\u043d\u044e \u0441 \u0438\u043a\u043e\u043d\u043a\u0430\u043c\u0438             } \t\t} \t\t});\t \t   \t\/\/\u0441\u0445\u0435\u043c\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445   \tvar mindmap_store_schema = { \/\/\u0441\u0445\u0435\u043c\u0430 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445   \t  name: &quot;mindmap_db&quot;,  \/\/\u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b   \t  keyPath: 'id', \/\/ \u043a\u043b\u044e\u0447 \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043a\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435,    \t  autoIncrement: false    \t};   \t   \tvar schema = { \/\/\u0432\u0441\u0435 \u0441\u0445\u0435\u043c\u044b \u0442\u0430\u0431\u043b\u0438\u0446   \t  stores: [mindmap_store_schema]   \t};    \t\t  \t   \tif( navigator.userAgent.toLowerCase().indexOf(&quot;android&quot;) !=-1 ) {\t  \t   \t\tvar options = {mechanisms: ['websql', 'indexeddb']};  \/\/\u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c websql \u0432 \u0430\u043d\u0434\u0440\u043e\u0438\u0434     } else {     \tvar options = {}; \/\/\u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c indexeddb \u043e\u043d \u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u0438 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439), \u0430 \u043f\u043e\u0442\u043e\u043c \u0443\u0436\u0435 \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435     } \t \tdb = new ydn.db.Storage('_all_mindmap', schema, options); \/\/\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430  \tapi4mindmap.jsLoadAllFromDB().done(function(){ \/\/\u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 \t\tapi4mindmap.jsRegAllKeys();    \/\/\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u043c \u043a\u043b\u0430\u0432\u0438\u0448\u0438 \t\tapi4mindmap.jsRenderAllMap(1); \/\/\u0440\u0438\u0441\u0443\u0435\u043c \u043a\u0430\u0440\u0442\u0443 \u0434\u043b\u044f \u0443\u0437\u043b\u0430 \u21161 \t\tapi4mindmap.jsDrawMindmap(1);  \/\/\u0440\u0438\u0441\u0443\u0435\u043c \u043b\u0438\u043d\u0438\u0438, \u0431\u0435\u0440\u044f \u0432\u0438\u0434\u0438\u043c\u044b\u0435 \u0443\u0437\u043b\u044b \u0441 \u044d\u043a\u0440\u0430\u043d\u0430 \t \tonResize(); \/\/\u043f\u0435\u0440\u0435\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0435\u043c \u043b\u0438\u043d\u0438\u0438 \t}); \/\/\u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0432\u0435\u0441\u044c \u043c\u0430\u0441\u0441\u0438\u0432 \u0438\u0437 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 \t }  <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<h5>\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u044f \u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0441\u044c \u043f\u0440\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438<\/h5>\n<p>  \u041f\u043e\u043a\u0430 \u043e\u0442\u043b\u043e\u0436\u0438\u043c \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u044f \u043a\u0440\u0430\u0442\u043a\u043e \u043e\u043f\u0438\u0448\u0443 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u044f \u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0441\u044c. \u041c\u043d\u043e\u0433\u0438\u0435 \u043d\u043e\u0432\u0438\u0447\u043a\u0438 \u043e \u043d\u0438\u0445 \u043d\u0435 \u0437\u043d\u0430\u044e\u0442 \u0438 \u0442\u0435\u0440\u044f\u044e\u0442 \u043d\u0430 \u044d\u0442\u043e\u043c \u0432\u0440\u0435\u043c\u044f.<\/p>\n<p>  \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u0443\u044e \u044f \u0432 <a href=\"http:\/\/panic.com\/coda\/\">Coda<\/a>, \u0430 \u0438\u043d\u043e\u0433\u0434\u0430 \u0432 <a href=\"http:\/\/www.sublimetext.com\/2\">Sublime Text<\/a>. Coda \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u0435\u0435, \u043d\u043e \u0447\u0443\u0442\u044c \u043f\u043e\u0434\u0442\u043e\u0440\u043c\u0430\u0436\u0438\u0432\u0430\u0435\u0442 \u0440\u0430\u0441\u043a\u0440\u0430\u0448\u0438\u0432\u0430\u044f \u043a\u043e\u0434 (\u043e\u043d\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434 \u041c\u0430\u043a), \u0430 Sublime Text \u2014 \u043e\u0447\u0435\u043d\u044c \u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 \u043b\u044e\u0431\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435, \u043d\u043e, \u0432\u043e \u043f\u0435\u0440\u0432\u044b\u0445, \u044f \u0435\u0449\u0451 \u043a \u043d\u0435\u043c\u0443 \u043d\u0435 \u043f\u0440\u0438\u0432\u044b\u043a, \u0430 \u0432\u043e \u0432\u0442\u043e\u0440\u044b\u0445, \u043b\u044e\u0431\u043b\u044e \u0437\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u043f\u0440\u044f\u043c\u043e \u0432 Coda \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440, \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u0441\u0442\u0440\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0444\u0430\u0439\u043b\u043e\u0432. \u0418 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u043e\u043c \u0434\u043b\u044f \u0441\u0432\u044f\u0437\u0438 \u0441 Debian \u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0441\u044c \u0447\u0435\u0440\u0435\u0437 Coda.<\/p>\n<p>  \u041d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u043c \u043f\u0440\u043e\u0440\u044b\u0432\u043e\u043c \u0432 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0434\u043b\u044f \u043c\u0435\u043d\u044f \u0441\u0442\u0430\u043b\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0435 <a href=\"http:\/\/git-scm.com\/book\/en\/Getting-Started\">GIT<\/a>. \u042d\u0442\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u0432\u0435\u0440\u0441\u0438\u0439. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0435\u0451 \u0447\u0435\u0440\u0435\u0437 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 <a href=\"https:\/\/github.com\/\">GitHub<\/a>:<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage3\/d82\/66d\/d25\/d8266dd25a05c1699b8b86c7984fabc3.png\"\/><\/p>\n<p>  Github \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u043a\u0430\u043a \u043e\u0431\u043b\u0430\u0447\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0441\u0432\u043e\u0435\u0433\u043e \u043a\u043e\u0434\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u0443\u0431\u043b\u0438\u043a\u0443\u044e \u0440\u0435\u043b\u0438\u0437\u044b \u0441 \u0435\u0433\u043e \u043f\u043e\u043c\u043e\u0449\u044c\u044e. \u0427\u0442\u043e\u0431\u044b \u00ab\u0437\u0430\u0440\u0435\u043b\u0438\u0437\u0438\u0442\u044c\u00bb \u0432\u0435\u0440\u0441\u0438\u044e \u0441\u0432\u043e\u0435\u0433\u043e \u0441\u0430\u0439\u0442\u0430, \u044f \u0434\u0435\u043b\u0430\u044e \u0442\u0430\u043a:  <\/p>\n<ol>\n<li>\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u044e \u0440\u0430\u0431\u043e\u0442\u0443 \u0441\u0430\u0439\u0442\u0430 \u043d\u0430 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435 \u0438 \u0434\u0435\u043b\u0430\u044e \u00ab\u041a\u043e\u043c\u043c\u0438\u0442\u00bb, \u0442.\u0435. \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u044e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f (\u0441\u043c.\u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443 \u0432\u044b\u0448\u0435, \u043a\u043d\u043e\u043f\u043a\u0430 Commit) <\/li>\n<li>\u00ab\u041f\u0443\u0448\u0443\u00bb \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u043e\u0434\u043d\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u043e\u0439 (\u0432 \u0442\u043e\u043c \u0436\u0435 \u043e\u043a\u043d\u0435 \u0432\u043d\u0438\u0437\u0443 \u0435\u0441\u0442\u044c \u043a\u043d\u043e\u043f\u043a\u0430 Sync)<\/li>\n<li>\u0417\u0430\u0445\u043e\u0436\u0443 \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b \u043d\u0430 \u0441\u0432\u043e\u0439 <a href=\"http:\/\/www.fornex.com\">\u0441\u0435\u0440\u0432\u0435\u0440 \u0432 \u0413\u0435\u0440\u043c\u0430\u043d\u0438\u0438<\/a> \u043f\u043e SSH \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e \u043a\u043e\u043c\u043c\u0430\u043d\u0434\u0443: <br \/>  git pull htt\u0440s:\/\/myuser_name:mysslpassword@github.com\/Imater\/tree.git master <\/li>\n<li>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u044e \u0441\u043a\u0440\u0438\u043f\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0436\u0438\u043c\u0430\u0435\u0442 \u0432\u0441\u0435 JS \u0438 CSS \u0444\u0430\u0439\u043b\u044b, \u0432\u044b\u043a\u0438\u0434\u044b\u0432\u0430\u044f \u0438\u0437 \u043d\u0438\u0445 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u0438 ZIP-\u0443\u044f \u0438\u0445 \u0432 \u043e\u0434\u0438\u043d \u0444\u0430\u0439\u043b js \u0438 \u043e\u0434\u0438\u043d \u0444\u0430\u0439\u043b css. \u0427\u0435\u043c \u043c\u0435\u043d\u044c\u0448\u0435 \u0444\u0430\u0439\u043b\u043e\u0432 \u0432\u044b \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0435 \u0432 \u0441\u0432\u043e\u044e HTML \u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043a\u0443, \u0442\u0435\u043c \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f \u0441\u0430\u0439\u0442<\/li>\n<\/ol>\n<p>  \u0412\u043e \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043a\u043e\u0434\u043e\u043c \u0443 \u043c\u0435\u043d\u044f \u0432\u0441\u0435\u0433\u0434\u0430 \u043e\u0442\u043a\u0440\u044b\u0442 Chrome \u0438 \u0435\u0433\u043e \u043a\u043e\u043d\u0441\u043e\u043b\u044c. \u0412 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043f\u043e\u0438\u0433\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0438 \u043e\u0442\u043b\u0430\u0434\u0438\u0442\u044c \u043a\u043e\u0434 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0430:<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage3\/b9c\/b32\/d2b\/b9cb32d2b16d2dc382a8c200d76d4bb2.png\"\/><\/p>\n<p>  \u041d\u0430\u0443\u0447\u0438\u0442\u0435\u0441\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u044e \u0438 <a href=\"http:\/\/habrahabr.ru\/post\/149053\/\">Developer Tools<\/a> \u0438 \u0431\u0443\u0434\u0435\u0442\u0435 \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e \u043a\u0440\u0430\u0441\u043a\u0435 \u043d\u0430 \u043a\u043b\u0430\u0432\u0438\u0448\u0435 F5 (\u0432 \u0441\u043b\u0443\u0447\u0430\u0435 MacOS \u2014 cmd+r). \u0421\u043e\u0432\u0441\u0435\u043c \u043d\u0435\u0434\u0430\u0432\u043d\u043e \u043e\u0442\u043a\u0440\u044b\u043b \u0434\u043b\u044f \u0441\u0435\u0431\u044f <a href=\"http:\/\/livereload.com\/\">LiveReload<\/a>. \u0415\u0441\u0442\u044c \u0432\u0435\u0440\u0441\u0438\u044f \u0438 \u043f\u043e\u0434 Win \u0438 \u043f\u043e\u0434 Mac. <\/p>\n<p>  \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443, \u043f\u043e\u0442\u043e\u043c \u0441\u0442\u0430\u0432\u0438\u0442\u0435 \u043f\u043b\u0430\u0433\u0438\u043d \u043f\u043e\u0434 \u0425\u0440\u043e\u043c \u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u043e\u0439 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0438\u043b\u0438 \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0435 \u043a\u043e\u0434 \u0441\u0440\u0430\u0437\u0443 \u0437\u0430 \u0442\u0435\u0433\u043e\u043c body \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c HTML \u0444\u0430\u0439\u043b\u0435:   <\/p>\n<pre><code class=\"javascript\">&lt;script&gt;document.write('&lt;script src=\\&quot;http:\/\/' + (location.host || 'localhost').split(':')[0] + ':35729\/livereload.js?snipver=1\\&quot;&gt;&lt;\/' + 'script&gt;')&lt;\/script&gt; <\/code><\/pre>\n<p>  \u0418 \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0435 \u043c\u0430\u0441\u0441\u0443 \u0443\u0434\u043e\u0432\u043e\u043b\u044c\u0441\u0442\u0432\u0438\u044f. \u0421\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u0442\u0430\u043a\u043e\u0439: \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0435 \u0441\u0432\u043e\u0439 \u0441\u0430\u0439\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u0443\u0435\u0442\u0435, \u043f\u043e\u0442\u043e\u043c \u043f\u0438\u0448\u0435\u0442\u0435 \u043a\u043e\u0434 \u0432 CSS \u0438\u043b\u0438 Javascript \u0438\u043b\u0438 \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0432 \u043f\u0430\u043f\u043a\u0435, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u00ab\u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u0442\u00bb livereload, \u0438 \u043a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u044b \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043b\u0438, \u0441\u0430\u0439\u0442 \u0441\u0440\u0430\u0437\u0443 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f. \u0415\u0441\u043b\u0438 \u0432\u044b \u0437\u0430\u043c\u0435\u043d\u0438\u043b\u0438 CSS, \u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e \u0431\u0435\u0437 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b.<\/p>\n<p>  \u041d\u0443 \u0438 \u0432 \u043a\u043e\u043d\u0446\u0435, \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u0445\u043e\u0447\u0443 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u043e\u0432\u0430\u0442\u044c <a href=\"http:\/\/tinypng.org\/\">\u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u0435\u043b\u044c<\/a> \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a PNG, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442 \u0434\u043e 70% \u043e\u0431\u044a\u0451\u043c\u0430 \u0438, \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c, \u0443\u0441\u043a\u043e\u0440\u044f\u0435\u0442 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0441\u0430\u0439\u0442\u0430.<\/p>\n<h5>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043a\u043e\u0434\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043a\u0430\u0440\u0442\u044b \u0443\u043c\u0430<\/h5>\n<p>  \u0412\u0435\u0441\u044c \u043a\u043e\u0434 \u0432\u044b\u043b\u043e\u0436\u0435\u043d \u043d\u0430 <a href=\"https:\/\/github.com\/Imater\/mindmap\">Github<\/a>. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0435\u0433\u043e \u0438 \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0432 \u043b\u044e\u0431\u0443\u044e \u043f\u0430\u043f\u043a\u0443. \u0412\u0441\u0451 \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e, \u0443\u0436\u0435 \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438. \u0412\u0441\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u044b \u0432 \u043f\u0430\u043f\u043a\u0435. \u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u0432 \u043a\u043e\u0434\u0435 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u0435.<\/p>\n<p>  \u041d\u0430\u0447\u043d\u0451\u043c \u0441 \u043e\u0441\u043d\u043e\u0432. \u042f \u043b\u044e\u0431\u043b\u044e \u043e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u0432\u0441\u0451 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0432 &quot;<a href=\"http:\/\/ru.wikipedia.org\/wiki\/%D0%9E%D0%B4%D0%B8%D0%BD%D0%BE%D1%87%D0%BA%D0%B0_(%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F)\">\u0441\u0438\u043d\u0433\u043b\u0442\u043e\u043d<\/a>&quot;. \u0414\u0435\u043b\u0430\u044e \u044d\u0442\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:  <\/p>\n<pre><code class=\"javascript\">var API_4_MINDMAP = function(){  \/\/singleton - \u043f\u0440\u0438 \u043c\u043d\u043e\u0433\u043e\u043a\u0440\u0430\u0442\u043d\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0435\u0434\u0438\u043d\u043e\u0436\u0434\u044b \t if ( (typeof arguments.callee.instance=='undefined') ) { \/\/\u0435\u0441\u043b\u0438 \u043e\u0431\u044a\u0435\u043a\u0442 \u0435\u0449\u0451 \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u043d \t\t arguments.callee.instance = new function() { \t\t     var my_all_data = {}; \t\t     var this_api = this; \/\/\u043a\u044d\u0448\u0438\u0440\u0443\u0435\u043c \u0441\u0430\u043c\u043e\u0433\u043e \u0441\u0435\u0431\u044f, \u0447\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u043d\u0443\u0442\u0440\u0438 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \t\t     this.jsAlert = function( name ) { \t\t        if( prompt(&quot;Hello &quot;+name+&quot;, are you ok?&quot;) ) { \t\t           var is_ok = true; \t\t        } else { \t\t           var is_ok = false; \t\t        } \t\t        my_all_data[name] = {}; \t\t        my_all_data[name] = {name: name, hi_is_ok: is_ok}; \t\t        return my_all_data; \t\t     }                           }      return arguments.callee.instance; \/\/\u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u0432\u0441\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 }  api4mindmap = new API_4_MINDMAP(); \/\/\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u043c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 api \u0438\u0437 &quot;\u0441\u0438\u043d\u0433\u043b\u0442\u043e\u043d\u0430&quot; console.info( api4mindmap.jsAlert(&quot;Habrahabr&quot;) );  <\/code><\/pre>\n<p>  \u041f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u0432 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u043d\u0443\u0442\u0440\u0438 \u0442\u0430\u043a\u043e\u0433\u043e \u00ab\u0441\u0438\u043d\u0433\u043b\u0442\u043e\u043d\u0430\u00bb \u0438 \u043d\u0435 \u0431\u043e\u044f\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0438\u043b\u0438 \u043a\u0430\u043a\u043e\u0439 \u043b\u0438\u0431\u043e \u043f\u043b\u0430\u0433\u0438\u043d \u0438\u0437\u043c\u0435\u043d\u0438\u0442 \u0434\u0430\u043d\u043d\u044b\u0435. \u041c\u044b \u0438\u0437\u043e\u043b\u0438\u0440\u0443\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435. \u0410 \u0438\u0437 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438, \u043c\u043d\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u043d\u0430\u0431\u0438\u0440\u0430\u0442\u044c \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438: \u00abapi4mindmap.js&#8230;\u00bb \u0438 \u0436\u0434\u0430\u0442\u044c \u0432\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u0441\u0435\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u0441\u043e\u0437\u0434\u0430\u043b. \u0411\u044b\u0441\u0442\u0440\u043e \u0438 \u0443\u0434\u043e\u0431\u043d\u043e.<\/p>\n<p>  \u0412 \u0441\u0432\u043e\u0451 \u0432\u0440\u0435\u043c\u044f \u0434\u043b\u044f \u043c\u0435\u043d\u044f \u0431\u044b\u043b\u043e <a href=\"http:\/\/habrahabr.ru\/post\/78991\/\">\u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0435\u043c<\/a>, \u0447\u0442\u043e \u0432 \u0432\u044b\u0448\u0435\u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435, \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435 my_all_data \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0442\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u0432\u044b\u0437\u043e\u0432\u0430\u043c\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0439.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e \u043f\u043b\u0430\u0433\u0438\u043d\u0430\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c:<\/p>\n<h5><a href=\"http:\/\/git.yathit.com\/ydn-db\/wiki\/Home\">Ydn.db<\/a> \u2014 \u0431\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430<\/h5>\n<p>  \u042d\u0442\u043e \u043f\u043b\u0430\u0433\u0438\u043d \u0434\u043b\u044f jQuery, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0435\u0434\u0438\u043d\u043e\u0433\u043e api \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0438 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u0432. \u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438 \u043d\u0430 \u043b\u044e\u0431\u044b\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430\u0445, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u043d\u0430 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0445. \u0414\u0430\u0436\u0435 \u0432 Phonegap.<\/p>\n<p>  \u042f \u043d\u0435 \u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0441\u044c \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e\u043c \u0435\u0433\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e, \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445:  <\/p>\n<pre><code class=\"javascript\"> this.jsLoadAllFromDB = function() { \/\/\u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0432\u0435\u0441\u044c \u043c\u0430\u0441\u0441\u0438\u0432 \u0438\u0437 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 \u0438\u043b\u0438 \u0438\u0437 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \t var d=new $.Deferred(); \/\/\u043e\u0431\u044a\u0435\u043a\u0442 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e   \t my_all_data = {}; \/\/\u043e\u0431\u043d\u0443\u043b\u044f\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435     db.values(&quot;mindmap_db&quot;,null,99999999).done(function(records) { \t \tif(records.length) { \t \t$.each(records, function(i, el){ \t\t \tmy_all_data[&quot;n&quot;+el.id] = {}; \t\t \tmy_all_data[&quot;n&quot;+el.id] = el; \t \t}); \t \t} else { \/\/\u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u043f\u0435\u0440\u0432\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a, \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u044e \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u0448\u0430\u0431\u043b\u043e\u043d\u0443 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e \u0432 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \t\t \tmy_all_data = my_all_data_template; \t\t \tthis_api.jsSaveAllToDB();  \t}  \td.resolve(); \/\/\u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043e\u0431\u0435\u0449\u0430\u043d\u0438\u0435, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f done  });    return d.promise(); \/\/\u0433\u043e\u0432\u043e\u0440\u0438\u043c, \u0447\u0442\u043e \u0441\u043a\u043e\u0440\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043c \u043e\u0431\u0435\u0449\u0430\u043d\u0438\u0435, \u043a\u043e\u0433\u0434\u0430 \u0432\u0441\u0451 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u0441\u044f   }   this.jsFind = function(id, changes) { \/\/\u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0441 id \u0438\u043b\u0438 \u043c\u0435\u043d\u044f\u0435\u043c \u0435\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b  \t  \t \/\/\u043d\u0430\u0445\u043e\u0434\u0438\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u0431\u0443\u043a\u0432\u0430 n \u043d\u0443\u0436\u043d\u0430 \u0434\u043b\u044f \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 id  \t var answer = my_all_data[&quot;n&quot;+id];   \t if(!answer) return false; \/\/\u0435\u0441\u043b\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435 \u043d\u0435\u0442    \t if(changes) { \/\/\u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e \u0432\u043d\u0435\u0441\u0442\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f, \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u043c \u0438\u0445 \u043f\u043e \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \t \t $.each(changes, function(name_field, new_field_value){  \t \t answer[name_field] = new_field_value; \t \t });   \t\t    \t\t db.put(&quot;mindmap_db&quot;, answer ).done(function(){ \/\/\u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0431\u0430\u0437\u0435 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430   \t\t \tconsole.info(&quot;\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u044b \u0432 \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430&quot;); \/\/\u0432\u044b\u0432\u043e\u0434\u0438\u043c \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430   \t\t }); \t \t   \t } \t return answer;  } <\/code><\/pre>\n<p>  \u042d\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0437 \u043a\u043e\u0434\u0430 \u0434\u043b\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 \u043a\u0430\u0440\u0442 \u0443\u043c\u0430. \u0422\u0443\u0442 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b: db.values(\u00abmindmap_db\u00bb,null,99999999) \u2014 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0432\u0441\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b IndexedDb (\u0435\u0441\u043b\u0438 \u0432 \u0425\u0440\u043e\u043c\u0435) \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u0445 .done(). \u0422\u0430\u043a \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0438\u0437 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445. \u041c\u043e\u0436\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b: db.get(\u00abmindmap_db\u00bb,5) \u2014 \u0442\u0430\u043a \u0432\u044b \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0441 id = 5.<\/p>\n<p>  \u0414\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430: db.put(\u00abmindmap_db\u00bb, answer ). \u0422\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u0430 \u0438 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u043d\u0435 \u0436\u0434\u0451\u0442 \u0435\u0451 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f, \u043e\u043d\u0430 \u043d\u0435 \u0437\u0430\u043c\u0435\u0434\u043b\u044f\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443. \u0418\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044d\u0442\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432 Chrome \u0431\u044b\u0441\u0442\u0440\u0435\u0435.<\/p>\n<p>  \u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u043c\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u043c\u0438, \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u0432 jQuery \u043e\u0431\u044a\u0435\u043a\u0442 <a href=\"http:\/\/habrahabr.ru\/post\/113073\/\">$.Deferred()<\/a>. \u041f\u0440\u0438\u043c\u0435\u0440 \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d \u0432\u044b\u0448\u0435. \u0412\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0431\u0435\u0449\u0430\u0435\u0442\u0435 \u0432 \u043a\u043e\u043d\u0446\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0447\u0442\u043e \u0432\u0435\u0440\u043d\u0451\u0442\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e, \u0442\u0430\u043a \u0441\u0440\u0430\u0437\u0443, \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b: return d.promise(x); \u0410 \u043f\u043e\u0442\u043e\u043c \u043a\u043e\u0433\u0434\u0430 \u0443 \u0432\u0430\u0441 \u0432\u0441\u0451 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043b\u043e\u0441\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u044b \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440, \u0432\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0435 d.resolve(200); \u0422\u043e\u0433\u0434\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f .done() \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0438 \u0435\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 x.<\/p>\n<p>  \u042d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0435 \u043f\u0438\u0441\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0430. \u0410 \u0435\u0449\u0451, \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u0438\u0437\u0443\u0447\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 $.when. \u042f \u0435\u0451 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0442\u043e\u0433\u0434\u0430, \u043a\u043e\u0433\u0434\u0430 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0438 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0438 \u0445\u043e\u0442\u0438\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043a\u043e\u0435-\u0447\u0442\u043e \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0445. \u0412\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440:  <\/p>\n<pre><code class=\"javascript\">function jsDo() {   var dfdArray = [];   for(var i=0; i&lt;1000; i++) {     dfdArray.push( jsAsync() );   }   $.when.apply(null, dfdArray).then( function(){ alert(&quot;\u0412\u0441\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u044b&quot;) } ); }  function jsAcync() {   var d = new $.Deferred();   setTimeout(function(){      d.resolve();   }, Math.random()*5000 );  return d.promise(); } <\/code><\/pre>\n<p>  \u041f\u043e \u0441\u0443\u0442\u0438, \u0442\u0443\u0442 \u0432\u0441\u0435 \u00ab\u043e\u0431\u0435\u0449\u0430\u043d\u0438\u044f\u00bb \u043d\u0430\u0431\u0438\u0440\u0430\u044e\u0442\u0441\u044f \u0432 \u043c\u0430\u0441\u0441\u0438\u0432 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0435 $.when, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044e &quot;.done&quot; \u0440\u043e\u0432\u043d\u043e \u0432 \u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442, \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u043e\u0431\u0435\u0449\u0430\u043d\u0438\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043e.<\/p>\n<p>  Ydn.db \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438, \u043d\u0435 \u0437\u0430\u0434\u0443\u043c\u044b\u0432\u0430\u044f\u0441\u044c \u043e \u043c\u0435\u0442\u043e\u0434\u0430\u0445 \u0438\u0445 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442 \u0438\u0445 \u043c\u043d\u043e\u0433\u043e\u043e\u0431\u0440\u0430\u0437\u0438\u0435 \u0432 \u0435\u0434\u0438\u043d\u044b\u0439 api. \u041e\u043d, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u043c\u0438, \u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0442\u0431\u043e\u0440\u044b, \u043d\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c \u0444\u0438\u043b\u044c\u0442\u0440\u044b, \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0442\u044c \u0441\u0443\u043c\u043c\u044b \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0445 \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435. \u041d\u043e \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435, \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0435\u0433\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0438 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445, \u0430 \u0440\u043e\u043b\u044c \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u0443 \u043d\u0430\u0441 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043c\u0430\u0441\u0441\u0438\u0432 my_all_data, \u044d\u0442\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u043e\u0447\u0435\u043d\u044c \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u043e\u0445\u0440\u0430\u043d\u043d\u043e\u0441\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u0435\u043c, \u0447\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f api4mindmap.jsFind(id, {title: \u00abnew_title\u00bb}), \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 \u044d\u0442\u043e\u0442 \u043c\u0430\u0441\u0441\u0438\u0432 \u0441\u0440\u0430\u0437\u0443, \u0430 \u0432 \u0431\u0430\u0437\u0443 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e. \u041d\u043e, \u0442\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0443\u0437\u043b\u0430 \u0432 \u043a\u0430\u0440\u0442\u0435 \u0443\u043c\u0430 \u0438 \u0442\u0443\u0442 \u0436\u0435 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0431\u0440\u0430\u0443\u0437\u0435\u0440, \u0430 \u0432\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f. \u0411\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u043e, \u043d\u0430\u0434\u0451\u0436\u043d\u043e \u0438 \u0438\u043c\u0435\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 100 \u043c\u0435\u0433\u0430\u0431\u0430\u0439\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438.<\/p>\n<p>  \u0418\u0437\u0443\u0447\u0438\u0432 Ydn.db, \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0431\u044b\u0442\u044c \u043f\u0440\u043e 5 \u043c\u0435\u0433\u0430\u0431\u0430\u0439\u0442 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439 LocalStorage. \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435, \u0447\u0442\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0431\u0443\u0434\u0443\u0442 \u0441\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043d\u0430 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043a\u0430\u0436\u0434\u044b\u0435 5 \u043c\u0435\u0433\u0430\u0431\u0430\u0439\u0442 (Chrome \u043d\u0435 \u0441\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442).<\/p>\n<p>  \u042d\u0442\u043e\u0442 \u043f\u043b\u0430\u0433\u0438\u043d \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 Android \u0438 \u0432 iOS. \u041d\u043e \u043f\u043e\u043c\u043d\u0438\u0442\u0435, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043e\u0448\u0438\u0431\u043e\u043a, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0432\u0430\u043c \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432\u044b\u0431\u043e\u0440 IndexedDB \u0432 Android. \u0427\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 Internet Explorer \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f IndexedDB, \u0447\u0442\u043e \u0443\u0441\u043a\u043e\u0440\u044f\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0437\u0430 \u0441\u0447\u0451\u0442 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0441\u0442\u0438. \u0415\u0441\u043b\u0438 \u0432\u044b \u0440\u0430\u0437\u043e\u043c \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0435 1000 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e, \u043d\u043e \u0441 \u0440\u0430\u0437\u043d\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e, \u0447\u0442\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c.<\/p>\n<h5><a href=\"http:\/\/jsplumbtoolkit.com\/home\/jquery.html\">jsPlumb<\/a> \u2014 \u0440\u0438\u0441\u0443\u0435\u043c \u043b\u0438\u043d\u0438\u0438 SVG \u0432 \u043b\u044e\u0431\u043e\u043c \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435<\/h5>\n<p>  \u0414\u043b\u044f \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f \u043b\u0438\u043d\u0438\u0439 \u043c\u0435\u0436\u0434\u0443 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438 html \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Canvas, \u043d\u043e \u043e\u043d \u0438\u043c\u0435\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u043e\u0432. \u0412\u0430\u043c \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c Canvas \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 4000 x 4000 px, \u0447\u0442\u043e \u043f\u0440\u0438\u0432\u0435\u043b\u043e \u0431\u044b \u043a \u043d\u0435\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u0435 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430. \u041b\u0438\u043d\u0438\u0438 \u0431\u044b\u043b\u0438 \u0431\u044b \u0440\u0430\u0441\u0442\u0440\u043e\u0432\u044b\u043c\u0438 \u0438 \u043d\u0430 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u044d\u043a\u0440\u0430\u043d\u0430\u0445 Retina, \u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438\u0441\u044c \u0431\u044b \u0445\u0443\u0436\u0435, \u0447\u0435\u043c \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0435. \u0410 \u0441\u0430\u043c\u043e\u0435 \u0441\u0442\u0440\u0430\u0448\u043d\u043e\u0435, \u0447\u0442\u043e \u0432\u0441\u0435 \u044d\u0442\u0438 16 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u0432 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439, \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u0438 \u0431\u044b \u043f\u0435\u0440\u0435\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u0432\u0432\u043e\u0434\u0435 \u0431\u0443\u043a\u0432\u044b \u0432 \u043a\u0430\u0440\u0442\u0443 \u0443\u043c\u0430.<\/p>\n<p>  jsPlumb \u0440\u0438\u0441\u0443\u0435\u0442 \u043a\u0430\u0436\u0434\u0443\u044e \u043b\u0438\u043d\u0438\u044e \u0432 SVG \u0438 \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u0435\u0442 \u0435\u0433\u043e \u0432 \u043d\u0443\u0436\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e, \u0441\u0442\u0430\u0432\u044f \u0435\u043c\u0443 CSS \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e absolute \u0438 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b. \u0415\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e \u043f\u0435\u0440\u0435\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u043b\u0438\u043d\u0438\u0438 \u043e\u0434\u043d\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439. \u041f\u043e \u0441\u0443\u0442\u0438, \u0432\u0430\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u0443\u044e \u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u0443\u044e \u0442\u043e\u0447\u043a\u0443, \u0437\u0430\u0442\u0435\u043c \u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u0438\u0445 \u043b\u0438\u043d\u0438\u0435\u0439 \u0438 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u0430\u0431\u044b\u0442\u044c \u043f\u0440\u043e \u043f\u043b\u0430\u0433\u0438\u043d. \u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 3 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0438 \u0432\u044b \u0443\u043c\u0435\u0435\u0442\u0435 \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u0441 \u043b\u0438\u043d\u0438\u044f\u043c\u0438.<\/p>\n<p>  \u041d\u0430 \u0438\u0445 \u0441\u0430\u0439\u0442\u0435 \u0435\u0441\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440, \u0433\u0434\u0435 \u043a\u0430\u0436\u0434\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0442\u044c \u043c\u044b\u0448\u043a\u043e\u0439, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043b\u0438\u043d\u0438\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u044e\u0442\u0441\u044f \u0432\u0441\u043b\u0435\u0434 \u0437\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u043c \u0431\u0435\u0437 \u0437\u0430\u043c\u0435\u0434\u043b\u0435\u043d\u0438\u044f.<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage3\/e07\/bc3\/5f7\/e07bc35f73363675b0b4c475215b13b8.png\"\/><\/p>\n<p>  \u0418\u0437\u0443\u0447\u0438\u0442\u0435, \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f \u0434\u043b\u044f \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f: \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440, \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432, \u043e\u0431\u0443\u0447\u0430\u043b\u043e\u043a (\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u043b\u0438\u043d\u0438\u0435\u0439 \u0441\u043e \u0441\u0442\u0440\u0435\u043b\u043a\u043e\u0439 \u043d\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043f\u0440\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0433\u043e\u0432\u043e\u0440\u044f\u0442), \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u043f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0439, \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435. \u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u043e \u0432\u0441\u0435\u0445 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430\u0445, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u043d\u0430 iOS \u0438 Android.<\/p>\n<h5><a href=\"http:\/\/medialize.github.io\/jQuery-contextMenu\/\">jQuery context menu<\/a> \u2014 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u043e\u0435 \u043c\u0435\u043d\u044e<\/h5>\n<p>  \u0412\u0441\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u044b \u043c\u0435\u043d\u044e \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u0432\u0438\u0434\u0435\u043b, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u0432\u043e\u0435\u0439 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0438 html. \u0410 \u0432 \u044d\u0442\u043e\u043c \u043f\u043b\u0430\u0433\u0438\u043d\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0432 \u043f\u0440\u043e\u0441\u0442\u043e\u043c, \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 JSON \u0444\u043e\u0440\u043c\u0430\u0442\u0435, \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432.<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage3\/94c\/f52\/120\/94cf5212054dd12a0f3b181717a20081.png\"\/><br \/>  \u0417\u0430\u0434\u0430\u0442\u044c \u043d\u0430\u0431\u043e\u0440 \u043a\u043e\u043c\u0430\u043d\u0434 \u0432 \u043c\u0435\u043d\u044e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0433\u043e \u043a\u043e\u0434\u0430:  <\/p>\n<pre><code class=\"javascript\">\t$.contextMenu({ \/\/\u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0435\u043c \u043d\u0430 \u043b\u0435\u0432\u044b\u0439 \u043a\u043b\u0438\u043a \u0432 .contextmenu         selector: '.contextmenu',          trigger: 'left',         callback: function(key, options) {         \tvar id = $(this).parents(&quot;li:first&quot;).attr(&quot;myid&quot;);             if( \/icon-\/ig.test(key) ) { \/\/\u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0435\u043c \u0438\u043a\u043e\u043d\u043a\u0443             \tapi4mindmap.jsFind(id, {icon:key}); \t            api4mindmap.jsRefreshMindmap();             } else if(key == &quot;delete&quot;) { \/\/\u0443\u0434\u0430\u043b\u044f\u0435\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0438 \u043f\u043e\u0442\u043e\u043c\u043a\u043e\u0432 \t           api4mindmap.jsDeleteById(id); \t           api4mindmap.jsRefreshMindmap(id);             } else if(key == &quot;add_down&quot;) { \/\/\u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432\u043d\u0438\u0437             \tvar parent_id = api4mindmap.jsFind(id).parent_id; \t            var new_id = api4mindmap.jsAddNew(parent_id, &quot;\u041d\u043e\u0432\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442&quot;); \t            api4mindmap.jsRefreshMindmap(); \t            $(&quot;#node_&quot;+new_id+&quot; .n_title&quot;).focus();             } else if(key == &quot;add_right&quot;) { \/\/\u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432\u043d\u0443\u0442\u0440\u044c \t            var new_id = api4mindmap.jsAddNew(id, &quot;\u041d\u043e\u0432\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442&quot;); \t            $(this).parents(&quot;li&quot;).removeClass(&quot;hide&quot;); \t            api4mindmap.jsRefreshMindmap(); \t            $(&quot;#node_&quot;+new_id+&quot; .n_title&quot;).focus();             }         },         delay:0,         items: {         \t&quot;add_down&quot;: {&quot;name&quot;:&quot;\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432\u043d\u0438\u0437&quot;, &quot;icon&quot;: &quot;icon-down-1&quot;},         \t&quot;add_right&quot;: {&quot;name&quot;:&quot;\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432\u043f\u0440\u0430\u0432\u043e&quot;, &quot;icon&quot;: &quot;icon-right-1&quot;},         \t&quot;sep1&quot;: &quot;--------&quot;,         \t&quot;delete&quot;: {&quot;name&quot;:&quot;\u0423\u0434\u0430\u043b\u0438\u0442\u044c&quot;, &quot;icon&quot;: &quot;icon-trash&quot;},             &quot;context_make_did1011&quot;: {&quot;name&quot;: &quot;\u0418\u043a\u043e\u043d\u043a\u0430&quot;, &quot;icon&quot;: &quot;icon-emo-wink&quot;,  \t            &quot;items&quot;: icons_html \/\/\u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u0443\u043d\u043a\u0442\u044b \u043c\u0435\u043d\u044e \u0441 \u0438\u043a\u043e\u043d\u043a\u0430\u043c\u0438             } \t\t} \t\t});\t  <\/code><\/pre>\n<p>  \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u043f\u0443\u043d\u043a\u0442 items, \u0432\u0441\u0451 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043d\u044f\u0442\u043d\u043e \u0438 \u043a\u0440\u0430\u0441\u0438\u0432\u043e. \u0422\u0435\u043c \u0431\u043e\u043b\u0435\u0435, \u0447\u0442\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432\u0441\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0435 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u044b\u043c \u043c\u0435\u043d\u044e \u0432\u043c\u0435\u0441\u0442\u0435 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 callback, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043c\u0435\u043d\u044c\u0448\u0435 \u043f\u0443\u0442\u0430\u0442\u044c\u0441\u044f.<\/p>\n<p>  \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435, \u0447\u0442\u043e \u043c\u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u044d\u0442\u043e \u043f\u043e\u0434\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u0440\u0438\u0441\u043e\u0432\u0430\u043b \u043d\u0435 \u0440\u0430\u0441\u0442\u0440\u043e\u0432\u044b\u0435 \u0438\u043a\u043e\u043d\u043a\u0438, \u0430 \u0438\u043a\u043e\u043d\u043a\u0438 \u0438\u0437 \u0448\u0440\u0438\u0444\u0442\u0430 Fontello.<\/p>\n<p>  \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u043c \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u043c \u044d\u0442\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u043e\u0433\u043e \u043c\u0435\u043d\u044e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e, \u0447\u0442\u043e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043a\u043b\u0430\u0432\u0438\u0448\u0430\u043c\u0438 \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u043f\u0443\u043d\u043a\u0442\u043e\u0432 \u0438, \u0434\u0430\u0436\u0435, \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0442\u044c \u0433\u043e\u0440\u044f\u0447\u0438\u0435 \u043a\u043b\u0430\u0432\u0438\u0448\u0438 \u043d\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b. \u0412\u0441\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430 \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u043f\u043e\u043d\u044f\u0442\u043d\u044b \u043f\u043e\u0441\u043b\u0435 \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f <a href=\"http:\/\/medialize.github.io\/jQuery-contextMenu\/demo.html\">\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043d\u0430 \u043e\u0444.\u0441\u0430\u0439\u0442\u0435<\/a>.<\/p>\n<h5><a href=\"http:\/\/fontello.com\/\">Fontello<\/a> \u2014 \u0448\u0440\u0438\u0444\u0442 \u0441 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u043c\u0438 \u0438\u043a\u043e\u043d\u043a\u0430\u043c\u0438<\/h5>\n<p>  \u0422\u0443\u0442 \u043a\u0430\u043a \u0432 \u0441\u0443\u043f\u0435\u0440\u043c\u0430\u0440\u043a\u0435\u0442\u0435, \u0437\u0430\u0445\u043e\u0434\u0438\u0442\u0435 \u043d\u0430 \u0441\u0430\u0439\u0442 \u0438 \u043d\u0430\u0431\u0438\u0440\u0430\u0435\u0442\u0435 \u0442\u0435 \u0438\u043a\u043e\u043d\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0430\u043c \u0441\u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u044c\u0441\u044f:<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage3\/3ad\/5b7\/bf1\/3ad5b7bf15a9b37d35b4cb21ab3e50c8.png\"\/><\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u0442\u0435 \u0430\u0440\u0445\u0438\u0432 \u0438 \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0435 \u0432 \u0441\u0432\u043e\u0439 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 html \u0444\u0430\u0439\u043b \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 CSS \u0444\u0430\u0439\u043b. \u0421 \u0442\u0435\u0445 \u043f\u043e\u0440, \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430, \u0432\u044b \u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435\u0441\u044c \u044d\u0442\u0438\u043c\u0438 \u0438\u043a\u043e\u043d\u043a\u0430\u043c\u0438 \u0432\u043e\u0442 \u0442\u0430\u043a:  \u2014 \u0442\u0430\u043a\u043e\u0439 html \u043a\u043e\u0434 \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u0442\u0441\u044f \u0432 \u0438\u043a\u043e\u043d\u043a\u0443.<\/p>\n<p>  \u0421\u0430\u043c\u0438 \u0438\u043a\u043e\u043d\u043a\u0438 \u043c\u043e\u0436\u0435\u0442\u0435 \u043e\u0446\u0435\u043d\u0438\u0442\u044c \u0432 <a href=\"https:\/\/4tree.ru\/mindmap\/\">\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438<\/a> \u043a\u0430\u0440\u0442\u044b \u0443\u043c\u0430, \u0437\u0430\u0439\u0434\u044f \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u043e\u0435 \u043c\u0435\u043d\u044e. \u0422\u0430\u043c 120 \u0438\u043a\u043e\u043d\u043e\u043a \u0432 \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0441\u0440\u0435\u0434\u0435 \u043e\u0431\u0438\u0442\u0430\u043d\u0438\u044f.<\/p>\n<h5><a href=\"http:\/\/jqueryui.com\/droppable\/\">jQuery UI<\/a> \u2014 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 \u0434\u043b\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c<\/h5>\n<p>  \u042d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u0437\u043d\u0430\u043c\u0435\u043d\u0438\u0442\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0435\u0441\u0442\u044c \u0442\u0430\u043a\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043a\u0430\u043a: \u0432\u044b\u0431\u043e\u0440 \u0434\u0430\u0442\u044b \u0438\u0437 \u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u0438\u043a\u0430, \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u043b\u044e\u0431\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u043f\u0435\u0440\u0435\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u043d\u0438\u0435, \u0432\u0435\u0440\u0445\u043d\u0438\u0435 \u0437\u0430\u043a\u043b\u0430\u0434\u043a\u0438, \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u043c\u044b\u0448\u043a\u043e\u0439 \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435. \u0418\u0437\u0443\u0447\u0438\u0442\u0435, \u043d\u0435 \u043f\u043e\u0436\u0430\u043b\u0435\u0435\u0442\u0435.<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage3\/827\/f2b\/42a\/827f2b42a49a399e0e5310bb72d6b240.png\"\/><br \/>  \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043a\u0430\u0440\u0442\u044b \u0443\u043c\u0430, \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c Drag&#038;drop \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u043d\u0438\u044f \u0443\u0437\u043b\u043e\u0432 \u043a\u0430\u0440\u0442\u044b \u043c\u0435\u0436\u0434\u0443 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0443\u0437\u043b\u0430\u043c\u0438. \u0422\u0443\u0442 \u0432\u0441\u0451 \u043f\u0440\u043e\u0441\u0442\u043e, \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0447\u0442\u043e \u043d\u0430\u043c \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u00ab\u0437\u0430\u043c\u0443\u0434\u0440\u0438\u0442\u044c\u00bb, \u044d\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043c\u044b \u043d\u0435 \u043f\u0435\u0440\u0435\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u0435\u043c \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044f \u043a \u0441\u0432\u043e\u0438\u043c \u043f\u043e\u0442\u043e\u043c\u043a\u0430\u043c, \u0442\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u043e \u043f\u0440\u0438\u0432\u0435\u043b\u043e \u0431\u044b \u043a \u0437\u0430\u0446\u0438\u043a\u043b\u0438\u0432\u0430\u043d\u0438\u044e \u0434\u0435\u0440\u0435\u0432\u0430.<\/p>\n<h5>CSS \u2014 \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u0430\u0440\u0442\u044b \u0443\u043c\u0430<\/h5>\n<p>  \u041a\u0430\u0436\u0434\u044b\u0439 \u0443\u0437\u0435\u043b \u0443 \u043d\u0430\u0441 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432\u043e\u0442 \u0442\u0430\u043a:  <\/p>\n<pre><code class=\"html\">&lt;div id=&quot;mindmap&quot;&gt;  &lt;ul class='childs'&gt;   &lt;li&gt;    &lt;div class='big_n_title'&gt;&lt;div class='n_title'&gt;&lt;\/div&gt;&lt;\/div&gt;    &lt;ul class='childs'&gt;       ......    &lt;\/ul&gt;   &lt;\/li&gt;  &lt;\/ul&gt; &lt;\/div&gt; <\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043d\u0430\u0437\u043d\u0430\u0447\u0438\u0442\u044c CSS \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c ul, li, .big_n_title \u0438 .n_title, \u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a\u0430\u044f \u043a\u0430\u0440\u0442\u0430 \u0443\u043c\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432\u044b \u0432\u0438\u0434\u0438\u0442\u0435. \u0412\u0441\u0435 CSS \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 <a href=\"https:\/\/github.com\/Imater\/mindmap\/blob\/master\/mindmap.css\">\u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u0445<\/a>.<\/p>\n<p>  \u041f\u043e \u0441\u0443\u0442\u0438, \u0432\u0435\u0441\u044c \u0441\u0435\u043a\u0440\u0435\u0442 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043c\u044b \u0434\u0435\u043b\u0430\u0435\u043c \u0442\u0430\u043a:  <\/p>\n<pre><code class=\"css\">#mindmap { \tbackground-image: url(cross.png); \tbackground-attachment: scroll; \twhite-space: nowrap; }  #mindmap ul { \tdisplay: inline-block; \twhite-space: nowrap; \tvertical-align: middle; \tlist-style: none; }  #mindmap .big_n_title { \tdisplay: inline-block; \tvertical-align: baseline; \tmargin-right: 40px; \tposition: relative; }  #mindmap .n_title { \tdisplay: inline-block; \twhite-space: normal; }  <\/code><\/pre>\n<p>  \u0422.\u0435. \u0437\u0430\u043f\u0440\u0435\u0449\u0430\u0435\u043c \u0441\u043f\u0438\u0441\u043a\u0430\u043c \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043d\u0430 \u043d\u043e\u0432\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443, \u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0441\u043f\u0438\u0441\u043a\u043e\u0432 \u0434\u0435\u043b\u0430\u0435\u043c display:inline-block, \u0442\u0430\u043a \u0447\u0442\u043e \u043e\u043d\u0438 \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u043f\u043e\u0434\u043e\u0431\u0438\u0435\u043c \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 \u0442\u0435\u043a\u0441\u0442\u0430. \u0422\u0430\u043a\u0436\u0435 \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0446\u0435\u043d\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u0438, \u0430 \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0443\u0437\u043b\u0430 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u043c\u044b \u043e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u043c \u0443\u0437\u0435\u043b \u0432 div.big_n_title.<\/p>\n<p>  \u041d\u0438\u0447\u0435\u0433\u043e \u0440\u0435\u0432\u043e\u043b\u044e\u0446\u0438\u043e\u043d\u043d\u043e\u0433\u043e \u0438 \u043e\u0447\u0435\u043d\u044c \u0441\u043b\u043e\u0436\u043d\u043e\u0433\u043e. \u0418 \u0432\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442.<\/p>\n<p>  \u041f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u043e, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u043f\u0440\u0438\u0451\u043c \u0441 <a href=\"http:\/\/www.w3schools.com\/cssref\/pr_text_direction.asp\">direction: rtl<\/a>, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u0443 \u0438 \u0432 \u0434\u0440\u0443\u0433\u0443\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u2014 \u0441\u043f\u0440\u0430\u0432\u0430 \u043d\u0430\u043b\u0435\u0432\u043e. \u041c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043b\u0435\u0432\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043a\u0430\u0440\u0442\u044b \u0443\u0445\u043e\u0434\u0438\u043b\u0430 \u0432 \u043e\u0434\u043d\u0443 \u0441\u0442\u043e\u0440\u043e\u043d\u0443, \u0430 \u043f\u0440\u0430\u0432\u0430\u044f \u0432 \u0434\u0440\u0443\u0433\u0443\u044e. \u041d\u043e \u044f \u0431\u043e\u043b\u044c\u0448\u0435 \u043b\u044e\u0431\u043b\u044e \u043e\u0434\u043d\u043e\u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0435 \u043a\u0430\u0440\u0442\u044b \u2014 \u0438\u0445 \u043f\u0440\u043e\u0449\u0435 \u0447\u0438\u0442\u0430\u0442\u044c.<\/p>\n<p>  \u041d\u0430\u0447\u043d\u0451\u043c \u0437\u0430\u043a\u0440\u0443\u0433\u043b\u044f\u0442\u044c\u0441\u044f. \u0412\u0441\u0435 \u043a\u0442\u043e \u0445\u043e\u0447\u0435\u0442, \u043f\u043e\u0447\u0438\u0442\u0430\u044e\u0442 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u0435 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u0432 \u043b\u0438\u0441\u0442\u0438\u043d\u0433\u0435 \u043a\u043e\u0434\u0430 \u043d\u0430 github, \u0445\u043e\u0442\u044f \u044f \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0438\u0442\u0430\u044e \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u0438\u043d\u043d\u044b\u043c\u0438 \u0438\u043c\u0435\u043d\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0430\u043c\u0438 \u0433\u043e\u0432\u043e\u0440\u044f\u0442 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u0435\u043b\u0430\u0435\u0442. \u041c\u043e\u0439 \u043a\u043e\u0434, \u0432\u043f\u043e\u043b\u043d\u0435 \u043c\u043e\u0436\u043d\u043e \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c, \u043d\u043e \u0442\u0443\u0442 \u043f\u0435\u0440\u0435\u0434\u043e \u043c\u043d\u043e\u0439 \u0441\u0442\u043e\u044f\u043b\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0432 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u043c \u043c\u043e\u0451\u043c <a href=\"https:\/\/4tree.ru\">\u043f\u0440\u043e\u0435\u043a\u0442\u0435<\/a>.<\/p>\n<p>  \u0418\u0437\u0443\u0447\u0430\u0439\u0442\u0435 \u0433\u043e\u0442\u043e\u0432\u044b\u0439 <a href=\"https:\/\/4tree.ru\/mindmap\/\">\u043f\u0440\u0438\u043c\u0435\u0440<\/a>, \u0432\u0441\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u044b.<\/p>\n<p>  PS: \u0415\u0441\u043b\u0438 \u0432\u044b \u00ab\u0447\u0443\u0442\u044c\u00bb \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442\u0435 \u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0435 <a href=\"http:\/\/www.mindmeister.com\/ru\/\">mindmaster<\/a> \u0438 \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u0431\u0440\u0430\u0442\u044c \u0441 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u043e\u0442 5 \u0434\u043e 15 \u0434\u043e\u043b\u043b\u0430\u0440\u043e\u0432 \u0432 \u043c\u0435\u0441\u044f\u0446 (\u0448\u0443\u0442\u043a\u0430).<\/p>\n<p>  \u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0432\u0430\u043c \u0437\u0430 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0430 jQuery \u0438 \u0441\u043e\u0437\u0434\u0430\u0442\u0435\u043b\u044f\u043c \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 \u0437\u0430 \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u044e \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \t\t\t<\/p>\n<div class=\"clear\"><\/div>\n<\/p><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/191850\/\"> http:\/\/habrahabr.ru\/post\/191850\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\"> \t\t\t<img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage3\/ea6\/221\/1d4\/ea62211d4013faa49c22a69a22e10416.png\"\/><br \/>  \u042d\u0442\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0443\u0447\u0435\u0431\u043d\u044b\u0439 <a href=\"https:\/\/4tree.ru\/mindmap\/\">\u043f\u0440\u0438\u043c\u0435\u0440<\/a> \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 \u043a\u0430\u0440\u0442\u044b \u0443\u043c\u0430. \u0417\u0430 \u0441\u0447\u0451\u0442 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u0445 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u0432 \u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u043f\u043e\u043d\u044f\u0442\u044c \u0435\u0433\u043e \u043d\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c. <\/p>\n<p>  \u042f \u043e\u0442\u0440\u0430\u0436\u0443 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 \u043a\u0430\u0440\u0442\u044b \u0443\u043c\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430. \u041f\u0440\u0438\u0447\u0451\u043c, \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043d\u0435 LocalStorage, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u0442\u044c 5 \u043c\u0435\u0433\u0430\u0431\u0430\u0439\u0442. \u041e\u0431\u044a\u0451\u043c \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0435\u0432\u044b\u0441\u0438\u0442\u044c 100-200 \u043c\u0435\u0433\u0430\u0431\u0430\u0439\u0442, \u0442\u0430\u043a \u043a\u0430\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f IndexedDB \u0438\u043b\u0438 webSQL, \u043c\u043e\u0442\u0440\u044f \u0447\u0442\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u0432 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435.<\/p>\n<p>  \u0418\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 <a href=\"https:\/\/github.com\/Imater\/mindmap\">\u0432\u044b\u043b\u043e\u0436\u0435\u043d\u044b \u0432 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043d\u0430 Github<\/a>.<\/p>\n<p>  \u041c\u044b \u0443\u043b\u043e\u0436\u0438\u043c\u0441\u044f \u0432 520 \u0441\u0442\u0440\u043e\u043a \u043a\u043e\u0434\u0430, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432 \u043d\u0430\u0448\u0435\u0439 \u043a\u0430\u0440\u0442\u0435 \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u0442\u044c \u0443\u0437\u043b\u044b \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439, \u0443\u0434\u0430\u043b\u044f\u0442\u044c, \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0438 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0435. \u0410 \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0442\u044c \u043e\u0434\u043d\u0443 \u0438\u0437 120 \u0438\u043a\u043e\u043d\u043e\u043a \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u043e\u0435 \u043c\u0435\u043d\u044e.<\/p>\n<p>  \u0421\u0435\u043a\u0440\u0435\u0442 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u0438\u0437\u043c\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u0435 \u0432 \u0431\u043e\u044e \u043f\u043b\u0430\u0433\u0438\u043d\u044b:  <\/p>\n<ol>\n<li><a href=\"http:\/\/git.yathit.com\/ydn-db\/wiki\/Home\">Ydn.db<\/a> \u2014 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 \u0441 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0432\u044b\u0431\u043e\u0440\u043e\u043c \u043b\u0443\u0447\u0448\u0435\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 \u0438 \u0435\u0434\u0438\u043d\u044b\u043c API <\/li>\n<li><a href=\"http:\/\/medialize.github.io\/jQuery-contextMenu\/\">jQuery context menu<\/a> \u2014 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u043e\u0435 \u043c\u0435\u043d\u044e, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 Javascript<\/li>\n<li><a href=\"http:\/\/jsplumbtoolkit.com\/home\/jquery.html\">jsPlumb<\/a> \u2014 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0435\u0435 \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043b\u0438\u043d\u0438\u0438 \u043c\u0435\u0436\u0434\u0443 HTML \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438<\/li>\n<li><a href=\"http:\/\/jqueryui.com\/droppable\/\">jQuery UI <\/a>\u2014 Drag&#038;drop \u2014 \u043f\u0435\u0440\u0435\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u043d\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439<\/li>\n<\/ol>\n<p>  PS: \u0422\u0430\u043a\u0436\u0435 \u043c\u044b \u043d\u0430\u0443\u0447\u0438\u043c\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u00ab\u0441\u0438\u043d\u0433\u043b\u0442\u043e\u043d\u00bb, \u043e\u0431\u043b\u0435\u0433\u0447\u0430\u0442\u044c \u0441\u0435\u0431\u0435 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 jQuery \u0438 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 $.Deferred(), \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043f\u043b\u0430\u0433\u0438\u043d\u0430 LiveReload, \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043c \u043a\u0440\u0430\u0441\u043a\u0443 \u043d\u0430 \u043a\u043b\u0430\u0432\u0438\u0448\u0435 F5 \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432 CSS \u0438 \u043a\u043e\u0434\u0430 \u0432 HTML \u0438 Javascript.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-191850","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/191850","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=191850"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/191850\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=191850"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=191850"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=191850"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}