{"id":328936,"date":"2022-02-02T03:00:14","date_gmt":"2022-02-02T03:00:14","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=328936"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=328936","title":{"rendered":"<span>\u00abKiss the cook\u00bb \u0438\u043b\u0438 \u0435\u0449\u0435 \u043f\u0430\u0440\u0430 \u0440\u0435\u0446\u0435\u043f\u0442\u043e\u0432 \u0434\u043b\u044f XWiki<\/span>"},"content":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/5f3\/12f\/d2e\/5f312fd2e69c185d2935c337f8ec674f.jpg\" width=\"1000\" height=\"466\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5f3\/12f\/d2e\/5f312fd2e69c185d2935c337f8ec674f.jpg\" data-blurred=\"true\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0421\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0432\u0441\u0451 \u043c\u0435\u043d\u044c\u0448\u0435 \u0438 \u043c\u0435\u043d\u044c\u0448\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0435\u0440\u0435\u0439\u0434\u0443 \u0441\u0440\u0430\u0437\u0443 \u043a \u0434\u0435\u043b\u0443.<\/p>\n<p>\u0412 <a href=\"https:\/\/habr.com\/ru\/post\/573626\/\" rel=\"noopener noreferrer nofollow\">\u043f\u0440\u043e\u0448\u043b\u044b\u0445 \u0441\u0442\u0430\u0442\u044c\u044f\u0445<\/a> \u044f \u043e\u0431\u0435\u0449\u0430\u043b \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0435\u0449\u0435 \u043f\u0430\u0440\u043e\u0439 \u043f\u0440\u0438\u0451\u043c\u043e\u0432 \u043f\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 XWiki, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u043a\u0430\u043a \u043f\u043e\u0440\u0442\u0430\u043b \u0434\u043b\u044f \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438.<\/p>\n<p>\u041b\u0443\u0447\u0448\u0435 \u043f\u043e\u0437\u0434\u043d\u043e \u0447\u0435\u043c \u043d\u0438\u043a\u043e\u0433\u0434\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u044b:<\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/post\/649157\/#a1\" rel=\"noopener noreferrer nofollow\">\u043f\u043e\u0447\u0438\u043d\u0438\u043c \u0441\u0432\u044f\u0437\u043a\u0443 ShowHide macro \u0438 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0439 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435<\/a>;<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/post\/649157\/#a2\" rel=\"noopener noreferrer nofollow\">\u043f\u043e\u0444\u0438\u043a\u0441\u0438\u043c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u043f\u043e\u0438\u0441\u043a\u043e\u043c<\/a>;<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/post\/649157\/#a3\" rel=\"noopener noreferrer nofollow\">\u043f\u043e\u043c\u0435\u043d\u044f\u0435\u043c \u0448\u0430\u0431\u043b\u043e\u043d \u0434\u043b\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0432\u0445\u043e\u0434\u0430<\/a>;<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/post\/649157\/#a4\" rel=\"noopener noreferrer nofollow\">\u0441\u0434\u0435\u043b\u0430\u0435\u043c \u043e\u0433\u043b\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0432 \u0431\u043e\u043a\u043e\u0432\u043e\u0439 \u043f\u0430\u043d\u0435\u043b\u0438<\/a>;<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/post\/649157\/#a5\" rel=\"noopener noreferrer nofollow\">\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c \u043f\u0430\u043a\u0435\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u043e\u0431\u044b\u0447\u043d\u044b\u043c \u043f\u043e\u0438\u0441\u043a\u043e\u043c \u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u043c Swagger \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435<\/a>.<\/p>\n<\/li>\n<\/ul>\n<p>\u042f \u0431\u0443\u0434\u0443 \u0434\u0430\u0432\u0430\u0442\u044c \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u0439, \u0438\u0431\u043e \u0441\u0442\u0430\u043b \u0437\u0430\u0431\u044b\u0432\u0430\u0442\u044c, \u0447\u0442\u043e \u0434\u0430 \u043a\u0430\u043a.  \u041f\u0440\u0438\u043c\u0435\u0440\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0434\u043b\u044f XWiki 12.10.10 \u0438 13.10.2.<\/p>\n<p><a class=\"anchor\" name=\"a1\" id=\"a1\"><\/a><\/p>\n<h2>\u0427\u0438\u043d\u0438\u043c \u0441\u0432\u044f\u0437\u043a\u0443 ShowHide macro \u0438 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438<\/h2>\n<p>\u041f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0439 \u043c\u0430\u043a\u0440\u043e\u0441 <a href=\"https:\/\/www.xwiki.org\/xwiki\/bin\/view\/Macros\/ShowHideMacro\" rel=\"noopener noreferrer nofollow\">ShowHide<\/a>  \u043f\u0440\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0439 \u043a \u0442\u0435\u043a\u0441\u0442\u0443 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0435\u0442 \u0440\u0435\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u043a\u043b\u0438\u043a \u043c\u044b\u0448\u044c\u044e. <\/p>\n<p>\u042d\u0442\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430 \u0430\u043d\u043d\u043e\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b.<\/p>\n<p>\u0417\u0430 \u043f\u043e\u043c\u043e\u0449\u044c \u0441 \u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0441\u043f\u0430\u0441\u0438\u0431\u043e <a class=\"mention\" href=\"\/users\/alexkhotkevich\">@alexkhotkevich<\/a>.<\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u0435 \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0441\u043a\u0440\u044b\u0442\u044b\u0445 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u044e <code>x+x+x+h<\/code>.<\/p>\n<p>\u0417\u0430\u0442\u0435\u043c \u043f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 <code>{XwikiURL)\/bin\/view\/Macros\/ShowHideMacro<\/code><\/p>\n<p>\u041e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0438 \u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u0435 <code>JavaScriptExtension<\/code>\u0437\u0430\u043c\u0435\u043d\u0438\u0442\u0435 \u043a\u043e\u0434 \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439:<\/p>\n<pre><code class=\"javascript\">require(['jquery'], function($) {     function onClick () {         var button = $(this),              content = button.parent().next(),              effect = button.attr('data-show-effect'),             data = button.data();         if($.inArray(effect,['toggle','fadeToggle','slideToggle']) == -1) effect = 'toggle';         data.showHideState = !(('showHideState' in data) ? data.showHideState : content.is(':visible'));         button.html(button.attr(data.showHideState ? 'data-hide-message' : 'data-show-message'));         content.stop()[effect](parseInt(button.attr('data-show-duration')));         return false;     }    $(document).on('xwiki:dom:updated',   function(){     $('.showhidebutton').children('a').off('click');     $('.showhidebutton').children('a').click(onClick);             }     )  });<\/code><\/pre>\n<p>\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0432\u043e\u0442 \u0442\u0430\u043a:<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"\/img\/image-loader.svg\" alt=\"\u041a\u043e\u0434 \u043c\u0430\u043a\u0440\u043e\u0441\u0430 ShowHide\" title=\"\u041a\u043e\u0434 \u043c\u0430\u043a\u0440\u043e\u0441\u0430 ShowHide\" height=\"1024\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/631\/06f\/d58\/63106fd58c55efef1258b3ed7ad5f30c.png\" data-width=\"1209\"\/><figcaption>\u041a\u043e\u0434 \u043c\u0430\u043a\u0440\u043e\u0441\u0430 ShowHide<\/figcaption><\/figure>\n<p>\u041d\u0435 \u0437\u0430\u0431\u0443\u0434\u044c\u0442\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c.\u00a0<\/p>\n<p><a class=\"anchor\" name=\"a2\" id=\"a2\"><\/a><\/p>\n<h2>\u0427\u0438\u043d\u0438\u043c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u043f\u043e\u0438\u0441\u043a\u043e\u043c<\/h2>\n<p>\u0418\u043d\u043e\u0433\u0434\u0430 \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u0446\u0438\u044e. \u041f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u0432 \u0440\u0430\u0437\u0434\u0435\u043b &#171;<strong>\u041f\u043e\u0438\u0441\u043a<\/strong>&#187; \u0432 \u0430\u0434\u043c\u0438\u043d-\u043f\u0430\u043d\u0435\u043b\u0438, \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043c\u0435\u043d\u044f\u0439\u0442\u0435 \u0438 \u043d\u0430\u0436\u043c\u0438\u0442\u0435  \u043a\u043d\u043e\u043f\u043a\u0443 &#171;<strong>\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c<\/strong>&#171;. <\/p>\n<p>\u0427\u0435\u0440\u0435\u0437 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u0441\u044f \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441 \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u0446\u0438\u0438 (\u0435\u0441\u043b\u0438 \u043d\u0435\u0442 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443).<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"\/img\/image-loader.svg\" alt=\"\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u043e\u0438\u0441\u043a\u0430 - \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u0446\u0438\u0438\" title=\"\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u043e\u0438\u0441\u043a\u0430 - \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u0446\u0438\u0438\" height=\"1015\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a7d\/ed8\/301\/a7ded8301307d278995dcf8a387fb504.png\" data-width=\"1226\"\/><figcaption>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u043e\u0438\u0441\u043a\u0430 &#8212; \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u0446\u0438\u0438<\/figcaption><\/figure>\n<p><a class=\"anchor\" name=\"a3\" id=\"a3\"><\/a><\/p>\n<h2>\u041c\u0435\u043d\u044f\u0435\u043c \u0448\u0430\u0431\u043b\u043e\u043d \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438<\/h2>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0441\u0432\u043e\u0439 \u0441\u043a\u0438\u043d. \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u043f\u0443\u0441\u0442\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0438 \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u043a \u043d\u0435\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 <code>XWikiSkins<\/code> \u0441 \u043b\u044e\u0431\u044b\u043c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c \u0438 \u0431\u0430\u0437\u043e\u0432\u044b\u043c \u0441\u043a\u0438\u043d\u043e\u043c <code>flamingo<\/code>\u00a0<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"\/img\/image-loader.svg\" alt=\"\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u043a\u0438\u043d\u0430\" title=\"\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u043a\u0438\u043d\u0430\" height=\"442\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/59c\/97b\/ac2\/59c97bac24b3208bef7d65513a8a0845.png\" data-width=\"678\"\/><figcaption>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u043a\u0438\u043d\u0430<\/figcaption><\/figure>\n<p>\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0438 \u0437\u0430\u043a\u0440\u043e\u0439\u0442\u0435 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432. \u041d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u0441\u043a\u0438\u043d\u0430 \u043f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435 &#171;<strong>\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043a\u0438\u043d<\/strong>&#171;.\u00a0<\/p>\n<p>\u041f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u0435 \u0448\u0430\u0431\u043b\u043e\u043d <code>login.vm<\/code> \u0438 \u0432\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u044d\u0442\u043e\u0442 \u043a\u043e\u0434:<\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u043e\u0434<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>## --------------------------------------------------------------------------- ## See the NOTICE file distributed with this work for additional ## information regarding copyright ownership. ## ## This is free software; you can redistribute it and\/or modify it ## under the terms of the GNU Lesser General Public License as ## published by the Free Software Foundation; either version 2.1 of ## the License, or (at your option) any later version. ## ## This software is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## Lesser General Public License for more details. ## ## You should have received a copy of the GNU Lesser General Public ## License along with this software; if not, write to the Free ## Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA ## 02110-1301 USA, or see the FSF site: http:\/\/www.fsf.org. ## --------------------------------------------------------------------------- #if ($xcontext.user != 'XWiki.XWikiGuest')   #if ($request.xredirect)     $response.sendRedirect($request.xredirect)   #else     $response.sendRedirect($xwiki.getURL($services.model.resolveDocument('', 'default', $doc.documentReference.extractReference('WIKI'))))   #end #elseif($doc.fullName != 'XWiki.XWikiLogin')   #set($qs = \"$!{request.queryString}\")   #if(!$request.getParameter('xredirect'))     #set($qs = \"xredirect=$escapetool.url($doc.getURL('view'))&amp;${qs}\")   #end   $response.sendRedirect($xwiki.getURL('XWiki.XWikiLogin', 'login', $qs)) #else ### ### Login page ### ### #template(\"startpage.vm\") &lt;div class=\"main layoutsubsection\"> &lt;div id=\"mainContentArea\"> &lt;form id=\"loginForm\" action=\"$doc.getURL('loginsubmit')\" method=\"post\" class=\"xform\"> &lt;div class=\"hidden\">&lt;input type=\"hidden\" name=\"xredirect\" value=\"$!{escapetool.xml($request.xredirect)}\"\/> #if(\"$!request.srid\" != '')   &lt;input type=\"hidden\" name=\"srid\" value=\"$!escapetool.xml($request.srid)\"\/> #end   &lt;input type=\"hidden\" name=\"form_token\" value=\"$!{services.csrf.getToken()}\"\/> &lt;\/div> #xwikimessageboxstart($services.localization.render('login') '') #set($message = $xcontext.message) #if($message)   &lt;!-- previous login errors -->   #error($services.localization.render($message)) #end #set($authFailureStrategyMessage = $services.security.authentication.getErrorMessage($request.j_username)) #if (\"$!authFailureStrategyMessage\" != '')   #error($authFailureStrategyMessage) #end #set ($supplementaryForm = $services.security.authentication.getForm($request.j_username)) &lt;dl>   &lt;dt>     &lt;label for=\"j_username\">$services.localization.render('username')&lt;\/label>     #if($xwiki.exists('XWiki.ForgotUsername') &amp;&amp; $xwiki.hasAccessLevel('view', 'XWiki.ForgotUsername'))       &lt;span class=\"xAdditional\">&lt;a href=\"$xwiki.getURL('XWiki.ForgotUsername')\" tabindex=\"500\">$services.localization.render('xe.admin.forgotUsername.loginMessage')&lt;\/a>&lt;\/span>     #end   &lt;\/dt>   &lt;dd class=\"input-group\">     &lt;span class=\"input-group-addon\">$services.icon.renderHTML('user')&lt;\/span>     &lt;input class=\"form-control\" type=\"text\" id=\"j_username\" size=\"60\" name=\"j_username\" value=\"\" tabindex=\"100\"\/>   &lt;\/dd>   &lt;dt>     &lt;label for=\"j_password\">$services.localization.render('password')&lt;\/label>     #if($xwiki.exists('XWiki.ResetPassword') &amp;&amp; $xwiki.hasAccessLevel('view', 'XWiki.ResetPassword'))       &lt;span class=\"xAdditional\">&lt;a href=\"$xwiki.getURL('XWiki.ResetPassword')\" tabindex=\"600\">$services.localization.render('xe.admin.passwordReset.loginMessage')&lt;\/a>&lt;\/span>     #end   &lt;\/dt>   &lt;dd class=\"input-group\">     &lt;span class=\"input-group-addon\">$services.icon.renderHTML('lock')&lt;\/span>     &lt;input type=\"password\" id=\"j_password\" size=\"60\" name=\"j_password\" value=\"\" tabindex=\"200\"\/>   &lt;\/dd>   &lt;dt>&lt;\/dt>   &lt;dd>     &lt;label class=\"xHint\" for=\"rememberme\">       &lt;input id=\"rememberme\" type=\"checkbox\" name=\"j_rememberme\" value=\"true\" tabindex=\"300\"\/> $services.localization.render('remembermeonthiscomp')     &lt;\/label>   &lt;\/dd>   #if (\"$!supplementaryForm\" != \"\")     &lt;div id=\"dedicated-auth-failures-field\">       $supplementaryForm     &lt;\/div>   #end   &lt;dt>&lt;input type=\"submit\" class=\"btn btn-primary col-xs-12\" value=\"$services.localization.render('login')\" tabindex=\"400\"\/>&lt;\/dt> &lt;\/dl> #xwikimessageboxend() &lt;\/form> &lt;\/div>## mainContentArea &lt;\/div>## main ## Ensure that the username field of the login form has the focus to make it easy for users to log in quickly &lt;script> \/\/&lt;![CDATA[   document.forms.loginForm.j_username.focus(); \/\/]]&gt; &lt;\/script> &lt;div id=\"customLogin\"> ## info about wiki admins &lt;h2> Xwiki &lt;\/h2> \u042d\u0442\u043e \u043c\u043e\u0439 \u0441\u043a\u0438\u043d \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0434\u043b\u044f \u0432\u0445\u043e\u0434\u0430, \u0430 \u044d\u0442\u043e \u043c\u043e\u0439 \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u043d\u0430 &lt;a href=\"https:\/\/habr.com\/ru\/users\/BosonBeard\/\">Habr&lt;\/a> &lt;\/div>   &lt;style> #customLogin{ max-width: 450px; margin:auto; } #customLoginOlimp h2{ color:#999; } &lt;\/style> #template(\"endpage.vm\") #end<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u041a\u043e\u0434 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 <code>login.vm<\/code> \u0438\u0437 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f <a href=\"https:\/\/github.com\/xwiki\/xwiki-platform\/blob\/master\/xwiki-platform-core\/xwiki-platform-flamingo\/xwiki-platform-flamingo-skin\/xwiki-platform-flamingo-skin-resources\/src\/main\/resources\/flamingo\/login.vm\" rel=\"noopener noreferrer nofollow\">\u0442\u0435\u043c\u044b flamingo<\/a>, \u044f \u043b\u0438\u0448\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0435\u0433\u043e \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043b \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430.<\/p>\n<p>\u041e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u0441\u043a\u0438\u043d \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u0445 \u0442\u0435\u043c\u044b.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"\/img\/image-loader.svg\" alt=\"\u0412\u044b\u0431\u043e\u0440 \u0441\u043a\u0438\u043d\u0430 \" title=\"\u0412\u044b\u0431\u043e\u0440 \u0441\u043a\u0438\u043d\u0430 \" height=\"625\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/65d\/43c\/ae5\/65d43cae502d13aba82c51ed41d5dd42.png\" data-width=\"1227\"\/><figcaption>\u0412\u044b\u0431\u043e\u0440 \u0441\u043a\u0438\u043d\u0430 <\/figcaption><\/figure>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0432\u0445\u043e\u0434\u0430<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"\/img\/image-loader.svg\" alt=\"\u041f\u0440\u0438\u043c\u0435\u0440 \u043e\u043a\u043d\u0430 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438\" title=\"\u041f\u0440\u0438\u043c\u0435\u0440 \u043e\u043a\u043d\u0430 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438\" height=\"429\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/fb4\/6f9\/696\/fb46f9696cd766790352d78d203d9924.png\" data-width=\"537\"\/><figcaption>\u041f\u0440\u0438\u043c\u0435\u0440 \u043e\u043a\u043d\u0430 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438<\/figcaption><\/figure>\n<p><a class=\"anchor\" name=\"a4\" id=\"a4\"><\/a><\/p>\n<h2>\u041e\u0433\u043b\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0432 \u0431\u043e\u043a\u043e\u0432\u043e\u0439 \u043f\u0430\u043d\u0435\u043b\u0438<\/h2>\n<p>\u041f\u0440\u043e\u0441\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u043f\u0430\u043d\u0435\u043b\u044c \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043a\u043e\u0434\u043e\u043c \u0438 \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u0442\u0435 \u0435\u0451 \u0432 \u0431\u043e\u043a\u043e\u0432\u043e\u0439 \u043f\u0430\u043d\u0435\u043b\u0438 (\u043f\u0440\u043e \u043f\u0430\u043d\u0435\u043b\u0438 \u0441\u043c. <a href=\"https:\/\/habr.com\/ru\/post\/551772\/\" rel=\"noopener noreferrer nofollow\">\u0432 \u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435<\/a>).<\/p>\n<pre><code>{{velocity}} {{context document=\"$services.model.serialize($doc.documentReference)\" transformationContext=\"document\"}} #set ($hasHeaders = []) #set ($mydoc = $doc.getDocument()) #foreach ($block in $mydoc.getXDOM().getBlocks('class:HeaderBlock', 'DESCENDANT'))  #set ($discard = $hasHeaders.add($block)) #end  #if($hasHeaders.size()>0)  #panelheader('Table of Contents')  {{box cssClass=\"righttoc\"}}{{toc\/}}{{\/box}} #end   {{\/context}} {{\/velocity}}<\/code><\/pre>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"\/img\/image-loader.svg\" alt=\"\u041f\u0440\u0438\u043c\u0435\u0440 \u043e\u043a\u043d\u0430 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0430\u043d\u0435\u043b\u0438 \u0434\u043b\u044f \u043e\u0433\u043b\u0430\u0432\u043b\u0435\u043d\u0438\u044f\" title=\"\u041f\u0440\u0438\u043c\u0435\u0440 \u043e\u043a\u043d\u0430 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0430\u043d\u0435\u043b\u0438 \u0434\u043b\u044f \u043e\u0433\u043b\u0430\u0432\u043b\u0435\u043d\u0438\u044f\" height=\"1029\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/38e\/99c\/c5f\/38e99cc5f38eada7738b35c6e96db1cc.png\" data-width=\"908\"\/><figcaption>\u041f\u0440\u0438\u043c\u0435\u0440 \u043e\u043a\u043d\u0430 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0430\u043d\u0435\u043b\u0438 \u0434\u043b\u044f \u043e\u0433\u043b\u0430\u0432\u043b\u0435\u043d\u0438\u044f<\/figcaption><\/figure>\n<p>\u041f\u0430\u043d\u0435\u043b\u044c \u0431\u0443\u0434\u0435\u0442 \u0441\u043a\u0440\u044b\u0442\u0430, \u0435\u0441\u043b\u0438 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u043d\u0435\u0442 \u043e\u0433\u043b\u0430\u0432\u043b\u0435\u043d\u0438\u044f.<\/p>\n<p><a class=\"anchor\" name=\"a5\" id=\"a5\"><\/a><\/p>\n<h2>\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043f\u0430\u043a\u0435\u0442 \u0438\u0437 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430 \u0438 \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u0435\u043c Swagger \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435<\/h2>\n<p>\u0418\u043d\u043e\u0433\u0434\u0430 \u043d\u0443\u0436\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u043f\u043e\u0438\u0441\u043a.<\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u0439\u0434\u0435\u043c \u043d\u0443\u0436\u043d\u044b\u0439 WebJar \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438.<\/p>\n<p>\u041c\u044b \u0432\u043e\u0437\u044c\u043c\u0435\u043c \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 <a href=\"https:\/\/mvnrepository.com\/artifact\/org.webjars\/swagger-ui\/4.4.1\" rel=\"noopener noreferrer nofollow\">Swagger UI 4.4.1<\/a><\/p>\n<p>\u041e\u0442\u043a\u0440\u043e\u0435\u043c \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u0439 \u043f\u043e\u0438\u0441\u043a \u0438 \u0432\u0432\u0435\u0434\u0435\u043c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0438 \u0432\u0435\u0440\u0441\u0438\u044e \u0444\u0430\u0439\u043b\u0430 \u0438\u0437 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f:<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"\/img\/image-loader.svg\" alt=\"\u041f\u0440\u0438\u043c\u0435\u0440 \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430\" title=\"\u041f\u0440\u0438\u043c\u0435\u0440 \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430\" height=\"781\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5f5\/3c6\/f3e\/5f53c6f3e74de0d7db70d9e4d81d3219.png\" data-width=\"1211\"\/><figcaption>\u041f\u0440\u0438\u043c\u0435\u0440 \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430<\/figcaption><\/figure>\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435.<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u043f\u0443\u0441\u0442\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443.<\/p>\n<p>\u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u043a \u043d\u0435\u0439 \u0432\u043b\u043e\u0436\u0435\u043d\u0438\u0435 (\u0443 \u043c\u0435\u043d\u044f \u044d\u0442\u043e swagger.json). <\/p>\n<p>\u041e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440, \u043f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u0432 \u0440\u0435\u0436\u0438\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0438 \u0432\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u044d\u0442\u043e\u0442 \u043a\u043e\u0434:<\/p>\n<details class=\"spoiler\">\n<summary>\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u043a\u043e\u0434<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>   {{velocity}} #set ($discard = $xwiki.linkx.use($services.webjars.url('swagger-ui', 'swagger-ui.css',  {'evaluate': true}), {'type': 'text\/css', 'rel': 'stylesheet'}))  {{html clean=false}}  &lt;style type=\"text\/css\"> hgroup.main {  left:0px !important;  }   hgroup.main a {  word-wrap: break-word !important;  } &lt;\/style>  &lt;div id=\"status\">\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 Swagger&lt;\/div> &lt;div id=\"swagger-ui\">...&lt;\/div>  &lt;script> var swaggerContainer = document.getElementById(\"swagger-ui\")  swaggerContainer.style.display=\"none\"; swagerContent = swaggerContainer.textContent  require.config({    paths: {       SwaggerUIBundle: \"$services.webjars.url('swagger-ui','swagger-ui-bundle')\",       SwaggerUIStandalonePreset: \"$services.webjars.url('swagger-ui','swagger-ui-standalone-preset')\"   } });   require([\"SwaggerUIBundle\",\"SwaggerUIStandalonePreset\"], function(SwaggerUIBundle,SwaggerUIStandalonePreset) {      statusDom=document.getElementById(\"status\");     statusDom.textContent = '\u0412\u0441\u0442\u0430\u0432\u043a\u0430 Swagger...'       window.onload =  function(){          \/\/ Begin Swagger UI call region       \/\/ Don't forget to change url.      const ui = SwaggerUIBundle({     url:\"http:\/\/localhost:8080\/bin\/download\/%D0%9F%D1%80%D0%BE%D1%87%D0%B0%D1%8F%20%D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D1%86%D0%B8%D1%8F\/%D0%9F%D1%80%D0%BE%D0%B2%D0%B5%D1%80%D0%BA%D0%B0%20%D0%B3%D0%B8%D0%BF%D0%BE%D1%82%D0%B5%D0%B7%20%28%D1%82%D0%B5%D1%85%D0%BF%D0%B8%D1%81%29\/Test%20Swagger\/WebHome\/swagger.json\",      dom_id: '#swagger-ui',     deepLinking: true,         presets: [           SwaggerUIBundle.presets.apis,           SwaggerUIStandalonePreset         ],         plugins: [           SwaggerUIBundle.plugins.DownloadUrl         ],        });       \/\/ End Swagger UI call region       window.ui = ui;       statusDom.textContent = '';       statusDom.style.display=\"none\";       swaggerContainer.style.display=\"block\";     }; }); &lt;\/script> {{\/html}}{{\/velocity}}<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u041d\u0435 \u0437\u0430\u0431\u0443\u0434\u044c\u0442\u0435 \u0432 url \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0432\u0430\u0448\u0443 \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0432\u043b\u043e\u0436\u0435\u043d\u0438\u0435.<\/p>\n<p>\u042d\u0442\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043a\u043e\u0434\u0430 &#171;\u043d\u0430 \u0441\u043a\u043e\u0440\u0443\u044e \u0440\u0443\u043a\u0443&#187; \u0435\u0441\u043b\u0438 \u0431\u0443\u0434\u0435\u0442 \u0432\u0440\u0435\u043c\u044f, \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0441\u0442\u0430\u0442\u044c\u044f\u0445 \u044f \u043f\u043e\u043a\u0430\u0436\u0443 \u043a\u0430\u043a \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043c\u0430\u043a\u0440\u043e\u0441 \u0434\u043b\u044f \u0432\u0441\u0442\u0430\u0432\u043a\u0438 Swagger.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"\/img\/image-loader.svg\" alt=\"\u041f\u0440\u0438\u043c\u0435\u0440 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0441\u043e Swagger\" title=\"\u041f\u0440\u0438\u043c\u0435\u0440 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0441\u043e Swagger\" height=\"1007\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c73\/0ab\/5a7\/c730ab5a759d9514c82cc8e70d34744f.png\" data-width=\"1223\"\/><figcaption>\u041f\u0440\u0438\u043c\u0435\u0440 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0441\u043e Swagger<\/figcaption><\/figure>\n<p>\u0421\u043f\u0430\u0441\u0438\u0431\u043e, \u0447\u0442\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043b\u0438 \u0434\u043e \u043a\u043e\u043d\u0446\u0430. \u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u0447\u0442\u043e \u043c\u043e\u0438 \u0440\u0435\u0446\u0435\u043f\u0442\u044b \u043a\u043e\u043c\u0443-\u0442\u043e \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u044b.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"v-portal\" style=\"display:none;\"><\/div>\n<\/div>\n<p> <!----> <!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/649157\/\"> https:\/\/habr.com\/ru\/post\/649157\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0421\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0432\u0441\u0451 \u043c\u0435\u043d\u044c\u0448\u0435 \u0438 \u043c\u0435\u043d\u044c\u0448\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0435\u0440\u0435\u0439\u0434\u0443 \u0441\u0440\u0430\u0437\u0443 \u043a \u0434\u0435\u043b\u0443.<\/p>\n<p>\u0412 <a href=\"https:\/\/habr.com\/ru\/post\/573626\/\" rel=\"noopener noreferrer nofollow\">\u043f\u0440\u043e\u0448\u043b\u044b\u0445 \u0441\u0442\u0430\u0442\u044c\u044f\u0445<\/a> \u044f \u043e\u0431\u0435\u0449\u0430\u043b \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0435\u0449\u0435 \u043f\u0430\u0440\u043e\u0439 \u043f\u0440\u0438\u0451\u043c\u043e\u0432 \u043f\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 XWiki, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u043a\u0430\u043a \u043f\u043e\u0440\u0442\u0430\u043b \u0434\u043b\u044f \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438.<\/p>\n<p>\u041b\u0443\u0447\u0448\u0435 \u043f\u043e\u0437\u0434\u043d\u043e \u0447\u0435\u043c \u043d\u0438\u043a\u043e\u0433\u0434\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u044b:<\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/post\/649157\/#a1\" rel=\"noopener noreferrer nofollow\">\u043f\u043e\u0447\u0438\u043d\u0438\u043c \u0441\u0432\u044f\u0437\u043a\u0443 ShowHide macro \u0438 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0439 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435<\/a>;<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/post\/649157\/#a2\" rel=\"noopener noreferrer nofollow\">\u043f\u043e\u0444\u0438\u043a\u0441\u0438\u043c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u043f\u043e\u0438\u0441\u043a\u043e\u043c<\/a>;<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/post\/649157\/#a3\" rel=\"noopener noreferrer nofollow\">\u043f\u043e\u043c\u0435\u043d\u044f\u0435\u043c \u0448\u0430\u0431\u043b\u043e\u043d \u0434\u043b\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0432\u0445\u043e\u0434\u0430<\/a>;<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/post\/649157\/#a4\" rel=\"noopener noreferrer nofollow\">\u0441\u0434\u0435\u043b\u0430\u0435\u043c \u043e\u0433\u043b\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0432 \u0431\u043e\u043a\u043e\u0432\u043e\u0439 \u043f\u0430\u043d\u0435\u043b\u0438<\/a>;<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/post\/649157\/#a5\" rel=\"noopener noreferrer nofollow\">\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c \u043f\u0430\u043a\u0435\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u043e\u0431\u044b\u0447\u043d\u044b\u043c \u043f\u043e\u0438\u0441\u043a\u043e\u043c \u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u043c Swagger \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435<\/a>.<\/p>\n<\/li>\n<\/ul>\n<p>\u042f \u0431\u0443\u0434\u0443 \u0434\u0430\u0432\u0430\u0442\u044c \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u0439, \u0438\u0431\u043e \u0441\u0442\u0430\u043b \u0437\u0430\u0431\u044b\u0432\u0430\u0442\u044c, \u0447\u0442\u043e \u0434\u0430 \u043a\u0430\u043a.  \u041f\u0440\u0438\u043c\u0435\u0440\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0434\u043b\u044f XWiki 12.10.10 \u0438 13.10.2.<\/p>\n<p><a class=\"anchor\" name=\"a1\" id=\"a1\"><\/a><\/p>\n<h2>\u0427\u0438\u043d\u0438\u043c \u0441\u0432\u044f\u0437\u043a\u0443 ShowHide macro \u0438 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0438<\/h2>\n<p>\u041f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0439 \u043c\u0430\u043a\u0440\u043e\u0441 <a href=\"https:\/\/www.xwiki.org\/xwiki\/bin\/view\/Macros\/ShowHideMacro\" rel=\"noopener noreferrer nofollow\">ShowHide<\/a>  \u043f\u0440\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u0439 \u043a \u0442\u0435\u043a\u0441\u0442\u0443 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0435\u0442 \u0440\u0435\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u043a\u043b\u0438\u043a \u043c\u044b\u0448\u044c\u044e. <\/p>\n<p>\u042d\u0442\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430 \u0430\u043d\u043d\u043e\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b.<\/p>\n<p>\u0417\u0430 \u043f\u043e\u043c\u043e\u0449\u044c \u0441 \u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0441\u043f\u0430\u0441\u0438\u0431\u043e <a class=\"mention\" href=\"\/users\/alexkhotkevich\">@alexkhotkevich<\/a>.<\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u0435 \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0441\u043a\u0440\u044b\u0442\u044b\u0445 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u044e <code>x+x+x+h<\/code>.<\/p>\n<p>\u0417\u0430\u0442\u0435\u043c \u043f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 <code>{XwikiURL)\/bin\/view\/Macros\/ShowHideMacro<\/code><\/p>\n<p>\u041e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0438 \u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u0435 <code>JavaScriptExtension<\/code>\u0437\u0430\u043c\u0435\u043d\u0438\u0442\u0435 \u043a\u043e\u0434 \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439:<\/p>\n<pre><code class=\"javascript\">require(['jquery'], function($) {     function onClick () {         var button = $(this),              content = button.parent().next(),              effect = button.attr('data-show-effect'),             data = button.data();         if($.inArray(effect,['toggle','fadeToggle','slideToggle']) == -1) effect = 'toggle';         data.showHideState = !(('showHideState' in data) ? data.showHideState : content.is(':visible'));         button.html(button.attr(data.showHideState ? 'data-hide-message' : 'data-show-message'));         content.stop()[effect](parseInt(button.attr('data-show-duration')));         return false;     }    $(document).on('xwiki:dom:updated',   function(){     $('.showhidebutton').children('a').off('click');     $('.showhidebutton').children('a').click(onClick);             }     )  });<\/code><\/pre>\n<p>\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0432\u043e\u0442 \u0442\u0430\u043a:<\/p>\n<figure class=\"full-width\"><figcaption>\u041a\u043e\u0434 \u043c\u0430\u043a\u0440\u043e\u0441\u0430 ShowHide<\/figcaption><\/figure>\n<p>\u041d\u0435 \u0437\u0430\u0431\u0443\u0434\u044c\u0442\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c.\u00a0<\/p>\n<p><a class=\"anchor\" name=\"a2\" id=\"a2\"><\/a><\/p>\n<h2>\u0427\u0438\u043d\u0438\u043c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u043f\u043e\u0438\u0441\u043a\u043e\u043c<\/h2>\n<p>\u0418\u043d\u043e\u0433\u0434\u0430 \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u0446\u0438\u044e. \u041f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u0432 \u0440\u0430\u0437\u0434\u0435\u043b &#171;<strong>\u041f\u043e\u0438\u0441\u043a<\/strong>&#187; \u0432 \u0430\u0434\u043c\u0438\u043d-\u043f\u0430\u043d\u0435\u043b\u0438, \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043c\u0435\u043d\u044f\u0439\u0442\u0435 \u0438 \u043d\u0430\u0436\u043c\u0438\u0442\u0435  \u043a\u043d\u043e\u043f\u043a\u0443 &#171;<strong>\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c<\/strong>&#171;. <\/p>\n<p>\u0427\u0435\u0440\u0435\u0437 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u0441\u044f \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441 \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u0446\u0438\u0438 (\u0435\u0441\u043b\u0438 \u043d\u0435\u0442 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443).<\/p>\n<figure class=\"full-width\"><figcaption>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u043e\u0438\u0441\u043a\u0430 &#8212; \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u0446\u0438\u0438<\/figcaption><\/figure>\n<p><a class=\"anchor\" name=\"a3\" id=\"a3\"><\/a><\/p>\n<h2>\u041c\u0435\u043d\u044f\u0435\u043c \u0448\u0430\u0431\u043b\u043e\u043d \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438<\/h2>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0441\u0432\u043e\u0439 \u0441\u043a\u0438\u043d. \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u043f\u0443\u0441\u0442\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0438 \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u043a \u043d\u0435\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 <code>XWikiSkins<\/code> \u0441 \u043b\u044e\u0431\u044b\u043c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c \u0438 \u0431\u0430\u0437\u043e\u0432\u044b\u043c \u0441\u043a\u0438\u043d\u043e\u043c <code>flamingo<\/code>\u00a0<\/p>\n<figure class=\"full-width\"><figcaption>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u043a\u0438\u043d\u0430<\/figcaption><\/figure>\n<p>\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0438 \u0437\u0430\u043a\u0440\u043e\u0439\u0442\u0435 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432. \u041d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u0441\u043a\u0438\u043d\u0430 \u043f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435 &#171;<strong>\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043a\u0438\u043d<\/strong>&#171;.\u00a0<\/p>\n<p>\u041f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u0435 \u0448\u0430\u0431\u043b\u043e\u043d <code>login.vm<\/code> \u0438 \u0432\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u044d\u0442\u043e\u0442 \u043a\u043e\u0434:<\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u043e\u0434<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>## --------------------------------------------------------------------------- ## See the NOTICE file distributed with this work for additional ## information regarding copyright ownership. ## ## This is free software; you can redistribute it and\/or modify it ## under the terms of the GNU Lesser General Public License as ## published by the Free Software Foundation; either version 2.1 of ## the License, or (at your option) any later version. ## ## This software is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## Lesser General Public License for more details. ## ## You should have received a copy of the GNU Lesser General Public ## License along with this software; if not, write to the Free ## Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA ## 02110-1301 USA, or see the FSF site: http:\/\/www.fsf.org. ## --------------------------------------------------------------------------- #if ($xcontext.user != 'XWiki.XWikiGuest')   #if ($request.xredirect)     $response.sendRedirect($request.xredirect)   #else     $response.sendRedirect($xwiki.getURL($services.model.resolveDocument('', 'default', $doc.documentReference.extractReference('WIKI'))))   #end #elseif($doc.fullName != 'XWiki.XWikiLogin')   #set($qs = \"$!{request.queryString}\")   #if(!$request.getParameter('xredirect'))     #set($qs = \"xredirect=$escapetool.url($doc.getURL('view'))&amp;${qs}\")   #end   $response.sendRedirect($xwiki.getURL('XWiki.XWikiLogin', 'login', $qs)) #else ### ### Login page ### ### #template(\"startpage.vm\") &lt;div class=\"main layoutsubsection\"> &lt;div id=\"mainContentArea\"> &lt;form id=\"loginForm\" action=\"$doc.getURL('loginsubmit')\" method=\"post\" class=\"xform\"> &lt;div class=\"hidden\">&lt;input type=\"hidden\" name=\"xredirect\" value=\"$!{escapetool.xml($request.xredirect)}\"\/> #if(\"$!request.srid\" != '')   &lt;input type=\"hidden\" name=\"srid\" value=\"$!escapetool.xml($request.srid)\"\/> #end   &lt;input type=\"hidden\" name=\"form_token\" value=\"$!{services.csrf.getToken()}\"\/> &lt;\/div> #xwikimessageboxstart($services.localization.render('login') '') #set($message = $xcontext.message) #if($message)   &lt;!-- previous login errors -->   #error($services.localization.render($message)) #end #set($authFailureStrategyMessage = $services.security.authentication.getErrorMessage($request.j_username)) #if (\"$!authFailureStrategyMessage\" != '')   #error($authFailureStrategyMessage) #end #set ($supplementaryForm = $services.security.authentication.getForm($request.j_username)) &lt;dl>   &lt;dt>     &lt;label for=\"j_username\">$services.localization.render('username')&lt;\/label>     #if($xwiki.exists('XWiki.ForgotUsername') &amp;&amp; $xwiki.hasAccessLevel('view', 'XWiki.ForgotUsername'))       &lt;span class=\"xAdditional\">&lt;a href=\"$xwiki.getURL('XWiki.ForgotUsername')\" tabindex=\"500\">$services.localization.render('xe.admin.forgotUsername.loginMessage')&lt;\/a>&lt;\/span>     #end   &lt;\/dt>   &lt;dd class=\"input-group\">     &lt;span class=\"input-group-addon\">$services.icon.renderHTML('user')&lt;\/span>     &lt;input class=\"form-control\" type=\"text\" id=\"j_username\" size=\"60\" name=\"j_username\" value=\"\" tabindex=\"100\"\/>   &lt;\/dd>   &lt;dt>     &lt;label for=\"j_password\">$services.localization.render('password')&lt;\/label>     #if($xwiki.exists('XWiki.ResetPassword') &amp;&amp; $xwiki.hasAccessLevel('view', 'XWiki.ResetPassword'))       &lt;span class=\"xAdditional\">&lt;a href=\"$xwiki.getURL('XWiki.ResetPassword')\" tabindex=\"600\">$services.localization.render('xe.admin.passwordReset.loginMessage')&lt;\/a>&lt;\/span>     #end   &lt;\/dt>   &lt;dd class=\"input-group\">     &lt;span class=\"input-group-addon\">$services.icon.renderHTML('lock')&lt;\/span>     &lt;input type=\"password\" id=\"j_password\" size=\"60\" name=\"j_password\" value=\"\" tabindex=\"200\"\/>   &lt;\/dd>   &lt;dt>&lt;\/dt>   &lt;dd>     &lt;label class=\"xHint\" for=\"rememberme\">       &lt;input id=\"rememberme\" type=\"checkbox\" name=\"j_rememberme\" value=\"true\" tabindex=\"300\"\/> $services.localization.render('remembermeonthiscomp')     &lt;\/label>   &lt;\/dd>   #if (\"$!supplementaryForm\" != \"\")     &lt;div id=\"dedicated-auth-failures-field\">       $supplementaryForm     &lt;\/div>   #end   &lt;dt>&lt;input type=\"submit\" class=\"btn btn-primary col-xs-12\" value=\"$services.localization.render('login')\" tabindex=\"400\"\/>&lt;\/dt> &lt;\/dl> #xwikimessageboxend() &lt;\/form> &lt;\/div>## mainContentArea &lt;\/div>## main ## Ensure that the username field of the login form has the focus to make it easy for users to log in quickly &lt;script> \/\/&lt;![CDATA[   document.forms.loginForm.j_username.focus(); \/\/]]&gt; &lt;\/script> &lt;div id=\"customLogin\"> ## info about wiki admins &lt;h2> Xwiki &lt;\/h2> \u042d\u0442\u043e \u043c\u043e\u0439 \u0441\u043a\u0438\u043d \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0434\u043b\u044f \u0432\u0445\u043e\u0434\u0430, \u0430 \u044d\u0442\u043e \u043c\u043e\u0439 \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u043d\u0430 &lt;a href=\"https:\/\/habr.com\/ru\/users\/BosonBeard\/\">Habr&lt;\/a> &lt;\/div>   &lt;style> #customLogin{ max-width: 450px; margin:auto; } #customLoginOlimp h2{ color:#999; } &lt;\/style> #template(\"endpage.vm\") #end<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u041a\u043e\u0434 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 <code>login.vm<\/code> \u0438\u0437 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f <a href=\"https:\/\/github.com\/xwiki\/xwiki-platform\/blob\/master\/xwiki-platform-core\/xwiki-platform-flamingo\/xwiki-platform-flamingo-skin\/xwiki-platform-flamingo-skin-resources\/src\/main\/resources\/flamingo\/login.vm\" rel=\"noopener noreferrer nofollow\">\u0442\u0435\u043c\u044b flamingo<\/a>, \u044f \u043b\u0438\u0448\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0435\u0433\u043e \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043b \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430.<\/p>\n<p>\u041e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u0441\u043a\u0438\u043d \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u0445 \u0442\u0435\u043c\u044b.<\/p>\n<figure class=\"full-width\"><figcaption>\u0412\u044b\u0431\u043e\u0440 \u0441\u043a\u0438\u043d\u0430 <\/figcaption><\/figure>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0432\u0445\u043e\u0434\u0430<\/p>\n<figure class=\"full-width\"><figcaption>\u041f\u0440\u0438\u043c\u0435\u0440 \u043e\u043a\u043d\u0430 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438<\/figcaption><\/figure>\n<p><a class=\"anchor\" name=\"a4\" id=\"a4\"><\/a><\/p>\n<h2>\u041e\u0433\u043b\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0432 \u0431\u043e\u043a\u043e\u0432\u043e\u0439 \u043f\u0430\u043d\u0435\u043b\u0438<\/h2>\n<p>\u041f\u0440\u043e\u0441\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u043f\u0430\u043d\u0435\u043b\u044c \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043a\u043e\u0434\u043e\u043c \u0438 \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u0442\u0435 \u0435\u0451 \u0432 \u0431\u043e\u043a\u043e\u0432\u043e\u0439 \u043f\u0430\u043d\u0435\u043b\u0438 (\u043f\u0440\u043e \u043f\u0430\u043d\u0435\u043b\u0438 \u0441\u043c. <a href=\"https:\/\/habr.com\/ru\/post\/551772\/\" rel=\"noopener noreferrer nofollow\">\u0432 \u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435<\/a>).<\/p>\n<pre><code>{{velocity}} {{context document=\"$services.model.serialize($doc.documentReference)\" transformationContext=\"document\"}} #set ($hasHeaders = []) #set ($mydoc = $doc.getDocument()) #foreach ($block in $mydoc.getXDOM().getBlocks('class:HeaderBlock', 'DESCENDANT'))  #set ($discard = $hasHeaders.add($block)) #end  #if($hasHeaders.size()>0)  #panelheader('Table of Contents')  {{box cssClass=\"righttoc\"}}{{toc\/}}{{\/box}} #end   {{\/context}} {{\/velocity}}<\/code><\/pre>\n<figure class=\"full-width\"><figcaption>\u041f\u0440\u0438\u043c\u0435\u0440 \u043e\u043a\u043d\u0430 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0430\u043d\u0435\u043b\u0438 \u0434\u043b\u044f \u043e\u0433\u043b\u0430\u0432\u043b\u0435\u043d\u0438\u044f<\/figcaption><\/figure>\n<p>\u041f\u0430\u043d\u0435\u043b\u044c \u0431\u0443\u0434\u0435\u0442 \u0441\u043a\u0440\u044b\u0442\u0430, \u0435\u0441\u043b\u0438 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u043d\u0435\u0442 \u043e\u0433\u043b\u0430\u0432\u043b\u0435\u043d\u0438\u044f.<\/p>\n<p><a class=\"anchor\" name=\"a5\" id=\"a5\"><\/a><\/p>\n<h2>\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043f\u0430\u043a\u0435\u0442 \u0438\u0437 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430 \u0438 \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u0435\u043c Swagger \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435<\/h2>\n<p>\u0418\u043d\u043e\u0433\u0434\u0430 \u043d\u0443\u0436\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u043f\u043e\u0438\u0441\u043a.<\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u0439\u0434\u0435\u043c \u043d\u0443\u0436\u043d\u044b\u0439 WebJar \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438.<\/p>\n<p>\u041c\u044b \u0432\u043e\u0437\u044c\u043c\u0435\u043c \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 <a href=\"https:\/\/mvnrepository.com\/artifact\/org.webjars\/swagger-ui\/4.4.1\" rel=\"noopener noreferrer nofollow\">Swagger UI 4.4.1<\/a><\/p>\n<p>\u041e\u0442\u043a\u0440\u043e\u0435\u043c \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u0439 \u043f\u043e\u0438\u0441\u043a \u0438 \u0432\u0432\u0435\u0434\u0435\u043c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0438 \u0432\u0435\u0440\u0441\u0438\u044e \u0444\u0430\u0439\u043b\u0430 \u0438\u0437 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f:<\/p>\n<figure class=\"full-width\"><figcaption>\u041f\u0440\u0438\u043c\u0435\u0440 \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430<\/figcaption><\/figure>\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435.<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u043f\u0443\u0441\u0442\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443.<\/p>\n<p>\u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u043a \u043d\u0435\u0439 \u0432\u043b\u043e\u0436\u0435\u043d\u0438\u0435 (\u0443 \u043c\u0435\u043d\u044f \u044d\u0442\u043e swagger.json). <\/p>\n<p>\u041e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440, \u043f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u0432 \u0440\u0435\u0436\u0438\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0438 \u0432\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u044d\u0442\u043e\u0442 \u043a\u043e\u0434:<\/p>\n<details class=\"spoiler\">\n<summary>\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u043a\u043e\u0434<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>   {{velocity}} #set ($discard = $xwiki.linkx.use($services.webjars.url('swagger-ui', 'swagger-ui.css',  {'evaluate': true}), {'type': 'text\/css', 'rel': 'stylesheet'}))  {{html clean=false}}  &lt;style type=\"text\/css\"> hgroup.main {  left:0px !important;  }   hgroup.main a {  word-wrap: break-word !important;  } &lt;\/style>  &lt;div id=\"status\">\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 Swagger&lt;\/div> &lt;div id=\"swagger-ui\">...&lt;\/div>  &lt;script> var swaggerContainer = document.getElementById(\"swagger-ui\")  swaggerContainer.style.display=\"none\"; swagerContent = swaggerContainer.textContent  require.config({    paths: {       SwaggerUIBundle: \"$services.webjars.url('swagger-ui','swagger-ui-bundle')\",       SwaggerUIStandalonePreset: \"$services.webjars.url('swagger-ui','swagger-ui-standalone-preset')\"   } });   require([\"SwaggerUIBundle\",\"SwaggerUIStandalonePreset\"], function(SwaggerUIBundle,SwaggerUIStandalonePreset) {      statusDom=document.getElementById(\"status\");     statusDom.textContent = '\u0412\u0441\u0442\u0430\u0432\u043a\u0430 Swagger...'       window.onload =  function(){<\/code><\/pre>\n<\/div>\n<\/details>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\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-328936","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/328936","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=328936"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/328936\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=328936"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=328936"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=328936"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}