Pug. Начало работы. Часть первая из двух

Pug — это шаблонизатор и html-препроцессор, написанный на javascript для платформы Node.js, с целью ускорения верстки. Это даже быстрее, чем при использовании emmet — так что будет полезен любому веб-разработчику. Тем более, что освоить Pug можно за пару часов, синтаксис достаточно прост и интуитивно понятен.

Создание проекта

Установка Pug

Для установки надо выполнить две команды, вторая должна быть выполнена из директории проекта:

Пробуем на зуб

Создадим в директории src файл index.pug следующего содержания:

Переходим в директорию src и выполняем команду:

Установка Gulp

Как работать с gulp — это тема для отдельной статьи, так что без подробностей.

Создаем файл gulpfile.js с тремя задачами для преобразования pug-файлов и отслеживания изменений.

Наш файл package.json сейчас имеет только три зависимости:

Синтаксис Pug

Синтаксис Pug достаточно прост. Он не имеет угловых скобок и закрывающих тегов. Вложенность элементов определяется отступом — табуляция или пробел. Классы css задаются через точку, идентификаторы — через решетку, атрибуты — в круглых скобках.

1. Теги, классы, идентификаторы

Давайте создадим маркированный список:

Теперь добавим css-классы нашей разметке:

Добавим тегу

    еще и идентификатор:

2. Атрибуты элемента

Чтобы указать атрибут элементу — достаточно указать его в круглых скобках:

Если атрибутов много, то можно указать их многострочными линиями:

3. Текст элемента

Результат будет одинаковым:

4. Буферизация и экранирование

5. Вывод переменных

6. Элемент внутри элемента

Давайте разместим изображение внутри параграфа:

Еще один пример — параграф, внутри которого и ссылка:

7. Комментарии в коде

8. Подключения (include)

Итоговый файл index.html :

9. Наследование шаблонов

Источник

Pug — подключение файлов, блоки, миксины (includes, bloks, mixins)

Подключение файлов

В Pug можно вставлять содержимое одного файла в другой. Это позволяет выносить в отдельные файлы разметку повторяющихся блоков или миксины. Возьмём два файла, один из которых содержит разметку для head, а второй разметку для footer

Теперь не нужно на каждой странице писать разметку для этих блоков. Достаточно подключить их через include

По итогу получим такой HTML

Не Pug файлы подключаются как текст

Подключим css и js файлы в Pug

В итоге получим таrой HTML

Можно комбинировать фильтры с include, позволяя фильтровать содержимое файлов по мере их включения. Попробуем вставить файл с markdown разметкой

Шаблоны блоки расширения

Pug поддерживает наследование шаблонов. Для этого используют ключевые слова block и extends. Блоки шаблона могут быть заменены в дочернем шаблоне. Блоки в Pug могут содержать контент по умолчанию. В приведенном ниже примере, в макете, определяются block scripts, block content и block foot.

Переопределяя блок можно поместить в него другие блоки. В следующем примере, при переопределении блока content в него были добавлены блоки sidebar и primary

append/prepend

В Pug можно переопределять блоки добавляя в них контент и не удаляя содержимое. Предположим есть скрипты которые должны подключаться на каждой странице. Тогда шаблон будет выглядеть следующим образом

У нас есть страница с Javascript игрой и для неё нужны свои скрипты. С помощью append/prepend можно добавить их не удаляя скрипты из родительского шаблона.

Когда используем append/prepend можно не писать слово block. Вместо block append head достаточно append head.

Частые ошибки в использовании шаблонов

Обратите внимание, что только блоки и определения миксинов могут отображаться на верхнем уровне(без отступа) дочернего шаблона. Это важно! Родительские шаблоны определяют общую структуру данных, а дочерние шаблоны могут только изменять определённые блоки в разметке и логику. Если дочерний шаблон попытается добавить контент вне блока, Pug не будет знать куда поместить его на странице.

Небуферизованный код, который может содержаться в разметке. Если вам нужно определить переменные для использования в дочернем шаблоне, вы можете сделать это несколькими различными способами:

Буферизованные комментарии Pug не могут отображаться на верхнем уровне расширяемого шаблона: они создают комментарии HTML, которые не будут помещаться в получившийся HTML. (Небуферизованные комментарии Pug могут располагаться где угодно.)

Миксины

С помощью миксинов можно создавать переиспользуемые блоки

Миксины могут принимать аргументы

Миксин может принимать блок Pug и действовать в зависимости от содержания

Миксины могут получать не явные attributes аргументы, которые берутся из атрибутов, переданных в миксин.

Можно использовать миксин с &atributes

В миксине можно устанавливать аргументы по умолчанию

Вы можете написать миксины, которые принимают неизвестное количество аргументов, используя синтаксис «rest arguments».

Источник

Html шаблонизатор Pug, документация на русском

Всем привет! Давно хотел написать хорошую развернутую документацию про Html препроцессор Pug и вот этот момент настал. Я довольно давно использую Pug в своей работе и просто балдею от него . Я не понимаю, как можно сегодня верстать и писать обычный нативный Html-код. Это же так нудно и долго.

Вообще Pug это примерно тоже самое, что и препроцессор Sass. Я имею ввиду тут логику, хотя и сам синтаксис немного похож. Если вы поняли, чем хорош Sass, то Pug вам понравится еще больше.

Pug — это шаблонизатор Html, написанный на языке JavaScript для Node.js. После интерпретации сервером синтаксис Pug превращается в Нtml код. Старое название Pug — Jade. Подробности не знаю, но у разработчика возникли проблемы с авторскими правами и проект был переименован в Pug. Так что, если встретите упоминание Jade, знайте, что речь идет о Pug.

Начало работы

Для того, чтобы работать с Pug вам необходим установить Node.js. Скачать его можно с официального сайта nodejs.org. После установки открываем консоль (в Windows это комбинация клавиш Win + R) и вводим команду:

Дождитесь пока установщик завершит установку. Чтобы проверить, что все прошло удачно введите команду в консоли:

Вам должно выдать последнюю версию Pug, например — 6.13.4.

Далее запускаем еще одну команду:

Если все прошло без ошибок, то можно начинать работу.

Чтобы скомпилировать все это в Html необходимо в консоли перейти в директорию с данным файлом и запустить команду:

В итоге получим в index.html

Синтаксис Pug

Код Pug достаточно прост. Он не имеет угловых скобок и закрывающих тегов. Вложенность элементов определяется отступом — Tab или пробел.

Все это делает код лаконичным и легкочитаемым. И самое главное — ускоряется скорость написания кода.

Как было уже отмечено, синтаксис Pug чем-то напоминает синтаксис Sass:

Это в основном тот список, что нужно знать, чтобы начать работать с Pug. Сюда я бы добавил еще то, что атрибуты указываются в круглых скобках. Давайте теперь по порядку.

Теги, классы, идентификаторы

Давайте напишем небольшую разметку, например маркированный список.

Html

Теперь добавим классы нашей разметке

Html

Добавим тегу ul еще и идентификатор

Html

Если обратили внимание, текст элементу списка задается через пробел. Об этом поговорим более подробнее ниже.

Атрибуты

Для того, чтобы указать атрибут элементу разметки достаточно указать его в круглых скобках.

Html

Если необходимо указать несколько атрибутов, то указываем их через запятую или пробел. Я больше предпочитаю пробел.

Html

Если атрибутов много, то можно указать их многострочными линиями

Если с атрибутами нам необходимо указать класс и/или индификатор, то указываются они до атрибутов.

Класс или Id можно указать также, как обычный атрибут.

Текст

Как было уже сказано, текст элементу указывается через пробел.

Можно указать и через символ | :

Если у вас много текста, например, большой абзац, то есть вариант написать текст, указав точку в конце тега и через отступ вложенностью указываем текст. После точки не должно быть никаких символов и пробелов.

Также можно указывать обычные html теги внутри текста.

Комментарии

Однострочные комментарии начинаются с символов — //

Html

Если не хотите выводить комментарии в итоговом html коде, а в pug-файлах они нужны, то достаточно сразу после слешей добавить дефис.

Также можно выводить и многострочные комментарии.

Html

Doctype

В Html5 doctype указывается следующим образом:

Html

Если вы хотите указать doctype для различных типов документов, то можете почитать более подробно в официальной документации как это сделать.

Подключения (include)

Большим достоинством Pug является возможность подключения отдельных модулей кода. То есть можно выносить в отдельные фрагменты кода целые области сайта. Например, можно вынести отдельно header, sidebar, content, footer и все это собрать в одном индексном файле. Такой подход сделает наш код удобочитаемым и в случае правок достаточно изменить в одном месте.

Html

Как видим код файла index.pug намного удобнее читать и ориентироваться в нем.

Также есть возможность подключать отдельные файлы стилей и скриптов.

Циклы

Циклы или итерации в Pug позволяют выполнять какие-то множественные операции, написав всего лишь несколько строк кода. Например, можно вывести список пунктов меню, написав код итерации следующим образом:

Html

Есть возможность также перебрать ключи в объекте.

Html

Вместо each вы можете использовать for в качестве псевдонима.

Html

Как видим, циклы это обычный JavaScript и ничего сложного тут нет, хватает всего лишь знаний основ данного языка программирования.

Миксины

Миксины позволяют создавать многократно повторяемые блоки кода. Это практически тоже самое, что и функция в языке программирования.

Как видим, чтобы вызвать миксин необходимо поставить символ + и без пробела написать название миксина. Если код миксина выносится в отдельный файл, то в том документе, где он вызывается необходимо его подключить через include в верхней части документа.

Аргументы

Миксин может принимать также и аргументы.

У нас есть также возможность установить значения аргументов по умолчанию. Делается это примерно также, как и установка параметров функции по умолчанию в ES6 (ECMAScript 6).

Блоки миксинов

Миксины могут выступать в качестве блоков или контейнеров, которые могут содержать различный контент.

Атрибуты

Помимо аргументов миксины также могут принимать и атрибуты.

А вот так можно вывести произвольное количество атрибутов:

Неизвестное количество аргументов

В миксинах Pug есть возможность передавать неизвестное количество аргументов, используя синтаксис «rest arguments«.

Наследование шаблонов

Pug позволяет создавать шаблоны страниц, то есть в последующем любую страницу сайта можно создать по заранее созданному шаблону. Таких шаблонов может быть сколько угодно.

Шаблон Pug

Страницы Pug

Из примера выше видим, что страницы «Главная» и «О нас» сделаны по одному шаблону. Ориентироваться в коде на таких страницах намного проще, ведь здесь только основное его содержимое.

Содержимое блока полностью заменяется дочерним шаблоном, но что, если нам необходимо просто добавить что-либо к содержимому по умолчанию?

Block append / prepend

block prepend — добавляет в начало списка, block append — в конец списка. Вообще слово block можно опустить, например — append scripts. Он является не обязательным.

Вообще следует отметить, что создание шаблонов — это мощная функция, которая позволяет разделять наш проект на простые и сложные конструкции страниц. Так что пользуйтесь данной возможностью.

Условия

Pug работает на основе JavaScript поэтому есть возможность использовать условия при написании кода, как и в любом другом языке программирования.

Интерполяция

В Pug существует несколько видов вывода переменных. Давайте обратимся к примеру.

Более подробнее про вывод переменных можете почитать в документации.

Конструкция Case

Можно записать данный код более компактно.

Pug позволяет использовать встроенный JavaScript код в ваших шаблонах. Существует 3 вида кода: небуферизированный, буферизированный и неэкранированный буферизированный.

Небуферизированный код

Небуферизированный код можно указать и как блок.

Буферизированный код

Неэкранированный буферизированный код

Фуф… Не маленькая получилась статья. На этом скорее всего завершу. Пока писал данную документацию сам узнал много чего новенького .

На этом все… Все спасибо за терпение (если дочитали до конца ). Пишите комменты, с удовольствием отвечу на вопросы. До встречи в других постах!

Источник

neretin-trike / pug.md

В Pug нет закрывающих тегов, вместо этого он использует строгую табуляцию (или отступы) для определения вложености тегов. Для закрытия тегов в конце необходимо добавить символ / : foo(bar=’baz’)/

Непосредственно в Pug можно вставлять элементы в HTML синтаксисе

В Pug можно встраивать JavaScript код, благодаря чему возможны конструкции показанные ниже.

Констуркция Switch Case

Pug поддерживает switch case, которая представляет собой более наглядный способ сравнить выражение сразу с несколькими вариантами.

Вставка JavaScript кода

Pug поддерживает вставку частей JavaScript кода в шаблоны.

Буфферизированный код начинается с символа =
Pug

Существуют различные комментариев: те, которые будут отображаться после компиляции, и те, которые пропадут.

Pug имеет возможность вставки содержимого одного файла в другой файл Pug.

Pug предоставляет различные способы вывода переменных.

Поддержка миксинов позволяет создавать переиспользуемые блоки.

Многострочный ассоциативный массив

R0NS0N commented Oct 2, 2018

Дякую. коротко і те що потрібно.

nerlihmax commented Oct 8, 2018

Спасибо, очень информативно! Не хватает лишь информации от том, как использовать аргументы из функции рендера, если таковая используется.

AlexeyRomanchenko commented Oct 20, 2018 •

neretin-trike commented Oct 28, 2018

Если я правильно тебя понял, то может быть такое решение:

Mikkou commented Nov 8, 2018

спасибо, коротко и ясно)

warezorwar commented Feb 28, 2019

sh4rov commented Jun 21, 2019

Petrivah commented Aug 5, 2019

Буфферизированный- тот который выводится
Не Буфферизированный- тот который Не выводится

webitall2019 commented Sep 24, 2019

Хороший туториал! спс

Mike2142 commented Nov 4, 2019 •

Очень полезная статья, спасибо!

badunius commented Nov 12, 2019

ситуация, нужно закомментировать один из элементов, находящийся на одном уровне с другими

комментирует 2 и 3

ImLoaD commented Nov 27, 2019 •

В человечьем PUG это делается вроде вот так

Warlock-9000 commented Dec 27, 2019

zzaq17 commented Feb 9, 2020 •

Благодарю) всё понятно и с примерами

Появился вопрос с meta блоками в head. Кто-нибудь сталкивался?
Ошибка в gulp:
Message: Unexpected token (8:8) Details: pos: 558 loc: [object Object] raisedAt: 559 domainThrown: true

Часть кода шаблона:

Часть кода для страницы:

Пробовал и #<>, и всё что нашёл в туториал, и просто название переменной. Но ничего не помогает. Как всё-таки добавить интерполяцию?

Источник

Основы HTML препроцессора PUG

В этой статье мы разберём HTML препроцессор PUG, который как правило используется для создания шаблонов, когда разрабатываете приложение на Node.js и Express.js, поэтому всем кто использует это, обязательно к прочтению.

Также если вам интересна шаблонизация для Node.js или Express.js, то почитайте часть учебника по Express.js «Express.js шаблонизатор Handlebars», тоже будет крайне интересно.

Как установить PUG:

Первым делом его нужно скачать, для этого нужно использовать NPM, вот какую команду нужно использовать:

Но если вы используете последнюю, то тогда вам подойдёт вот эта команда:

То есть всё как обычно.

Работа с HTML препроцессор PUG:

Для начала разберём на мой взгляд главную особенность PUG, а заключается она в том, что вам не обязательно использовать полноценные теги, вам достаточно будет использовать их название, и если вам надо вставить строку, то просто вставляете её через пробел, если блок, то вставляете его с отступами.

Вот не большой пример этого:

Как видите, мы тут сделали заголовок H1 и H3, также создали список UL, и как можете заметить, чтобы внутри блока создать ещё один тег, достаточно просто сделать отступы в четыре пробела.

Ещё мы используем конструкцию #, title это переменная которую мы берём из контекста, который мы передаём шаблонизатору, а фигурные скобки со знаком решётка, обозначает что нужно вывести эту переменную.</p><p>Но кроме вывода переменных, вы можете использовать условия и циклы, делается это так же просто.</p><p><a href="http://prognote.ru/web-dev/layout/basics-of-the-pug-html-preprocessor/" target="_blank" rel="noopener">Источник</a></p><div class="fpm_end"></div></div></div></article></div><ul class="default-wp-page clearfix"><li class="previous"><a href="https://max.akademiakhv.ru/teaching/kak-podklyuchit-pt1000-vmesto-pt100" rel="prev"><span class="meta-nav">←</span> Как подключить pt1000 вместо pt100</a></li><li class="next"><a href="https://max.akademiakhv.ru/teaching/kak-podklyuchit-pug-k-webpack" rel="next">Как подключить pug к webpack <span class="meta-nav">→</span></a></li></ul><div class="related-posts-wrapper"><h4 class="related-posts-main-title"> <i class="fa fa-thumbs-up"></i><span>Вам также понравится</span></h4><div class="related-posts clearfix"><div class="single-related-posts"><div class="article-content"><h3 class="entry-title"> <a href="https://max.akademiakhv.ru/teaching/shugaring-vosk-ili-saharnaya-pasta-chto-luchshe" rel="bookmark" title="Шугаринг воск или сахарная паста что лучше"> Шугаринг воск или сахарная паста что лучше </a></h3><div class="below-entry-meta"> <span class="posted-on"><a href="https://max.akademiakhv.ru/teaching/shugaring-vosk-ili-saharnaya-pasta-chto-luchshe" title="01:40" rel="bookmark"><i class="fa fa-calendar-o"></i> <time class="entry-date published" datetime="2023-08-19T01:40:06+00:00">19.08.2023</time><time class="updated" datetime="2023-08-19T00:16:40+00:00">19.08.2023</time></a></span> <span class="byline"> <span class="author vcard"> <i class="fa fa-user"></i> <a class="url fn n" href="https://max.akademiakhv.ru/author/admin" title="admin" > admin </a> </span> </span> <span class="comments"> <i class="fa fa-comment"></i><a href="https://max.akademiakhv.ru/teaching/shugaring-vosk-ili-saharnaya-pasta-chto-luchshe#respond">0</a> </span></div></div></div><div class="single-related-posts"><div class="article-content"><h3 class="entry-title"> <a href="https://max.akademiakhv.ru/teaching/vidovaya-kvartira-v-moskve-chto-eto" rel="bookmark" title="видовая квартира в москве что это"> видовая квартира в москве что это </a></h3><div class="below-entry-meta"> <span class="posted-on"><a href="https://max.akademiakhv.ru/teaching/vidovaya-kvartira-v-moskve-chto-eto" title="13:23" rel="bookmark"><i class="fa fa-calendar-o"></i> <time class="entry-date published" datetime="2023-08-23T13:23:28+00:00">23.08.2023</time><time class="updated" datetime="2023-08-24T03:13:04+00:00">24.08.2023</time></a></span> <span class="byline"> <span class="author vcard"> <i class="fa fa-user"></i> <a class="url fn n" href="https://max.akademiakhv.ru/author/admin" title="admin" > admin </a> </span> </span> <span class="comments"> <i class="fa fa-comment"></i><a href="https://max.akademiakhv.ru/teaching/vidovaya-kvartira-v-moskve-chto-eto#respond">0</a> </span></div></div></div><div class="single-related-posts"><div class="article-content"><h3 class="entry-title"> <a href="https://max.akademiakhv.ru/teaching/shelkovaya-yubka-midi-s-chem-nosit-foto" rel="bookmark" title="Шелковая юбка миди с чем носить фото"> Шелковая юбка миди с чем носить фото </a></h3><div class="below-entry-meta"> <span class="posted-on"><a href="https://max.akademiakhv.ru/teaching/shelkovaya-yubka-midi-s-chem-nosit-foto" title="22:32" rel="bookmark"><i class="fa fa-calendar-o"></i> <time class="entry-date published" datetime="2023-08-18T22:32:20+00:00">18.08.2023</time><time class="updated" datetime="2023-08-18T21:18:46+00:00">18.08.2023</time></a></span> <span class="byline"> <span class="author vcard"> <i class="fa fa-user"></i> <a class="url fn n" href="https://max.akademiakhv.ru/author/admin" title="admin" > admin </a> </span> </span> <span class="comments"> <i class="fa fa-comment"></i><a href="https://max.akademiakhv.ru/teaching/shelkovaya-yubka-midi-s-chem-nosit-foto#respond">0</a> </span></div></div></div></div></div><div id="comments" class="comments-area"><div id="respond" class="comment-respond"><h3 id="reply-title" class="comment-reply-title">Добавить комментарий <small><a rel="nofollow" id="cancel-comment-reply-link" href="/teaching/189719#respond" style="display:none;">Отменить ответ</a></small></h3><form action="https://max.akademiakhv.ru/wp-comments-post.php" method="post" id="commentform" class="comment-form" novalidate><p class="comment-notes"><span id="email-notes">Ваш адрес email не будет опубликован.</span> <span class="required-field-message">Обязательные поля помечены <span class="required">*</span></span></p><p class="comment-form-comment"><label for="comment">Комментарий <span class="required">*</span></label><textarea id="comment" name="comment" cols="45" rows="8" maxlength="65525" required></textarea></p><p class="comment-form-author"><label for="author">Имя <span class="required">*</span></label> <input id="author" name="author" type="text" value="" size="30" maxlength="245" autocomplete="name" required /></p><p class="comment-form-email"><label for="email">Email <span class="required">*</span></label> <input id="email" name="email" type="email" value="" size="30" maxlength="100" aria-describedby="email-notes" autocomplete="email" required /></p><p class="form-submit"><input name="submit" type="submit" id="submit" class="submit" value="Отправить комментарий" /> <input type='hidden' name='comment_post_ID' value='189719' id='comment_post_ID' /> <input type='hidden' name='comment_parent' id='comment_parent' value='0' /></p></form></div></div></div><div id="secondary"><aside id="custom_html-9" class="widget_text widget widget_custom_html clearfix"><h3 class="widget-title"><span>Курсы криптовалют сегодня:</span></h3><div class="textwidget custom-html-widget"><div id="sidebar-block" style="width: 300px; height: 400px; padding: 10px; box-sizing: border-box; overflow-y: auto;"><div id="date-section" style="font-size: 18px; font-weight: bold; margin-bottom: 10px;"></div><div id="crypto-section" style="width: 100%;"></div></div></div></aside><aside id="custom_html-10" class="widget_text widget widget_custom_html clearfix"><h3 class="widget-title"><span>Сумеешь обыграть компьютер?</span></h3><div class="textwidget custom-html-widget"><div class="tic-tac-toe"><div class="status">Ваш ход</div><div class="board"><div class="cell" data-index="0"></div><div class="cell" data-index="1"></div><div class="cell" data-index="2"></div><div class="cell" data-index="3"></div><div class="cell" data-index="4"></div><div class="cell" data-index="5"></div><div class="cell" data-index="6"></div><div class="cell" data-index="7"></div><div class="cell" data-index="8"></div></div> <button class="reset">Играть снова</button></div></div></aside><aside id="search-3" class="widget widget_search clearfix"><h3 class="widget-title"><span>Найти на сайте</span></h3><form action="https://max.akademiakhv.ru/" class="search-form searchform clearfix" method="get" role="search"><div class="search-wrap"> <input type="search" class="s field" name="s" value="" placeholder="Поиск" /> <button class="search-icon" type="submit"></button></div></form></aside><aside id="recent-posts-3" class="widget widget_recent_entries clearfix"><h3 class="widget-title"><span>Новые записи</span></h3><ul><li> <a href="https://max.akademiakhv.ru/books/litres_plany-na-leto">Читайте фрагменты книги Планы на лето под авторством Ася Лавринович, Like Book прямо сейчас на нашем сайте max.akademiakhv.ru в различным популярных форматах FB2, TXT, PDF, EPUB бесплатно без регистрации.</a></li><li> <a href="https://max.akademiakhv.ru/books/litres_ukradennyy-naslednik">Читайте фрагменты книги Украденный наследник под авторством Холли Блэк, А. С. Федотова, Freedom прямо сейчас на нашем сайте max.akademiakhv.ru в различным популярных форматах FB2, TXT, PDF, EPUB бесплатно без регистрации.</a></li><li> <a href="https://max.akademiakhv.ru/books/litres_idealnoe-sovpadenie">Читайте фрагменты книги Идеальное совпадение под авторством Кэнди Стайнер, Варвара Конова прямо сейчас на нашем сайте max.akademiakhv.ru в различным популярных форматах FB2, TXT, PDF, EPUB бесплатно без регистрации.</a></li><li> <a href="https://max.akademiakhv.ru/books/litres_chestno-ukradennaya-vedma">Читайте фрагменты книги Честно украденная ведьма под авторством Милена Завойчинская прямо сейчас на нашем сайте max.akademiakhv.ru в различным популярных форматах FB2, TXT, PDF, EPUB бесплатно без регистрации.</a></li><li> <a href="https://max.akademiakhv.ru/books/litres_ona-konchaet-pervoy-kak-dostavit-zhenschine-naslazhdenie">Читайте фрагменты книги Она кончает первой. Как доставить женщине наслаждение под авторством Ян Кернер, Владимир Черепанов, БОМБОРА прямо сейчас на нашем сайте max.akademiakhv.ru в различным популярных форматах FB2, TXT, PDF, EPUB бесплатно без регистрации.</a></li></ul></aside><aside id="recent-comments-3" class="widget widget_recent_comments clearfix"><h3 class="widget-title"><span>Комментарии пользователей</span></h3><ul id="recentcomments"><li class="recentcomments"><span class="comment-author-link">Николай</span> к записи <a href="https://max.akademiakhv.ru/teaching/kak-podklyuchit-dopolnitelnyy-resiver-k-kompressoru#comment-261">Как подключить дополнительный ресивер к компрессору</a></li><li class="recentcomments"><span class="comment-author-link">Лев</span> к записи <a href="https://max.akademiakhv.ru/teaching/selftsest-chto-eto-takoe-prostymi-slovami#comment-259">Селфцест что это такое простыми словами</a></li><li class="recentcomments"><span class="comment-author-link">Не известность</span> к записи <a href="https://max.akademiakhv.ru/teaching/kak-podklyuchitsya-k-blyutuz-kolonke-chuzhoy#comment-258">Как подключиться к блютуз колонке чужой</a></li><li class="recentcomments"><span class="comment-author-link">Игорь</span> к записи <a href="https://max.akademiakhv.ru/teaching/sertifikat-oon-na-taru-chto-eto#comment-215">Сертификат оон на тару что это</a></li><li class="recentcomments"><span class="comment-author-link">Денис</span> к записи <a href="https://max.akademiakhv.ru/teaching/kto-takie-polkovniki-baranets-i-timoshenko#comment-213">Кто такие полковники баранец и тимошенко</a></li></ul></aside><aside id="custom_html-7" class="widget_text widget widget_custom_html clearfix"><div class="textwidget custom-html-widget"><div class="saydbar-bor"></div></div></aside></div></div></div><div class="advertisement_above_footer"><div class="inner-wrap"><aside id="custom_html-8" class="widget_text widget widget_custom_html clearfix"><div class="textwidget custom-html-widget"><div class="menu-niz"></div></div></aside></div></div><footer id="colophon" class="clearfix "><div class="footer-widgets-wrapper"><div class="inner-wrap"><div class="footer-widgets-area clearfix"><div class="tg-footer-main-widget"><div class="tg-first-footer-widget"><aside id="custom_html-3" class="widget_text widget widget_custom_html clearfix"><div class="textwidget custom-html-widget"><div align="center"> <font color="white" size="+2"> Контакты для Роскомнадзора - informationforweb2023@gmail.com </font></div></div></aside></div></div><div class="tg-footer-other-widgets"><div class="tg-second-footer-widget"></div><div class="tg-third-footer-widget"></div><div class="tg-fourth-footer-widget"></div></div></div></div></div><div class="footer-socket-wrapper clearfix"><div class="inner-wrap"><div class="footer-socket-area"><div class="footer-socket-right-section"><div class="social-links"><ul><li><a href="/" target="_blank"><i class="fa fa-google-plus"></i></a></li><li><a href="/" target="_blank"><i class="fa fa-pinterest"></i></a></li><li><a href="/" target="_blank"><i class="fa fa-youtube"></i></a></li></ul></div></div><div class="footer-socket-left-section"><div class="copyright">Все права сохранены. © 2026 <a href="https://max.akademiakhv.ru/" title="Познавательно-развлекательный портал max.akademiakhv.ru" ><span>Познавательно-развлекательный портал max.akademiakhv.ru</span></a> Внимание! Информация, опубликованная на сайте, носит исключительно ознакомительный характер и не является рекомендацией к применению. Материалы могут содержать информацию, предназначенную для пользователей старше 18 лет. 18+.</div></div></div></div></div></footer> <a href="#masthead" id="scroll-up"><i class="fa fa-chevron-up"></i></a></div> <script>document.addEventListener("copy",(event)=>{var pagelink="\nИсточник: https://max.akademiakhv.ru/teaching/189719";event.clipboardData.setData("text",document.getSelection()+pagelink);event.preventDefault();});</script> <script>window.lazyLoadCallbackByFlat=function(r){var t,a;120<r.naturalWidth||(t="maxresdefault",(a=new Image).src=r.src.replace(t,"hqdefault"),a.onload=function(){var a;120<this.naturalWidth?r.src=this.src:((a=new Image).src=r.src.replace(t,"sddefault"),a.onload=function(){var a;120<this.naturalWidth?r.src=this.src:((a=new Image).src=r.src.replace(t,"mqdefault"),a.onload=function(){var a;120<this.naturalWidth?r.src=this.src:((a=new Image).src=r.src.replace(t,"default"),a.onload=function(){120<this.naturalWidth&&(r.src=this.src)})})})})};window.lazyLoadOptions={elements_selector:"img[data-lazy-src],.rocket-lazyload,iframe[data-lazy-src]",data_src:"lazy-src",data_srcset:"lazy-srcset",data_sizes:"lazy-sizes",class_loading:"lazyloading",class_loaded:"lazyloaded",threshold:300,callback_loaded:function(element){if(element.tagName==="IFRAME"&&element.dataset.rocketLazyload=="fitvidscompatible"){if(element.classList.contains("lazyloaded")){if(typeof window.jQuery!="undefined"){if(jQuery.fn.fitVids){jQuery(element).parent().fitVids();}}}}}};window.addEventListener('LazyLoad::Initialized',function(e){var lazyLoadInstance=e.detail.instance;if(window.MutationObserver){var observer=new MutationObserver(function(mutations){var image_count=0;var iframe_count=0;var rocketlazy_count=0;mutations.forEach(function(mutation){for(i=0;i<mutation.addedNodes.length;i++){if(typeof mutation.addedNodes[i].getElementsByTagName!=='function'){return;} if(typeof mutation.addedNodes[i].getElementsByClassName!=='function'){return;} images=mutation.addedNodes[i].getElementsByTagName('img');is_image=mutation.addedNodes[i].tagName=="IMG";iframes=mutation.addedNodes[i].getElementsByTagName('iframe');is_iframe=mutation.addedNodes[i].tagName=="IFRAME";rocket_lazy=mutation.addedNodes[i].getElementsByClassName('rocket-lazyload');image_count+=images.length;iframe_count+=iframes.length;rocketlazy_count+=rocket_lazy.length;if(is_image){image_count+=1;} if(is_iframe){iframe_count+=1;}}});if(image_count>0||iframe_count>0||rocketlazy_count>0){lazyLoadInstance.update();}});var b=document.getElementsByTagName("body")[0];var config={childList:true,subtree:true};observer.observe(b,config);}},false);</script><script data-no-minify="1" async src="https://max.akademiakhv.ru/wp-content/plugins/rocket-lazy-load/assets/js/16.1/lazyload.min.js"></script><script>function lazyLoadThumb(e){var t='<img loading="lazy" onload="lazyLoadCallbackByFlat(this);" data-lazy-src="https://i.ytimg.com/vi/ID/maxresdefault.jpg" alt="" width="1280" height="720">',a='<div class="play"></div>';return t.replace("ID",e)+a}function lazyLoadYoutubeIframe(){var e=document.createElement("iframe"),t="ID?autoplay=1";t+=0===this.dataset.query.length?'':'&'+this.dataset.query;e.setAttribute("src",t.replace("ID",this.dataset.src)),e.setAttribute("frameborder","0"),e.setAttribute("allowfullscreen","1"),e.setAttribute("allow","accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"),this.parentNode.replaceChild(e,this)}document.addEventListener("DOMContentLoaded",function(){var e,t,a=document.getElementsByClassName("rll-youtube-player");for(t=0;t<a.length;t++)e=document.createElement("div"),e.setAttribute("data-id",a[t].dataset.id),e.setAttribute("data-query",a[t].dataset.query),e.setAttribute("data-src",a[t].dataset.src),e.innerHTML=lazyLoadThumb(a[t].dataset.id),e.onclick=lazyLoadYoutubeIframe,a[t].appendChild(e)});</script> <script>(function(){function flat_load(){setTimeout(function(){function appendbody(){var script=document.createElement('script');script.src="https://max.akademiakhv.ru/wp-content/cache/autoptimize/js/autoptimize_4572c2533a63a59b3c63ed7503552b74.js";document.getElementsByTagName('head')[0].appendChild(script);} function flat_load_script(){document.removeEventListener('mousemove',flat_load_script);document.removeEventListener('touchstart',flat_load_script);document.removeEventListener('scroll',flat_load_script);appendbody();} document.addEventListener('mousemove',flat_load_script,false);document.addEventListener('touchstart',flat_load_script,false);document.addEventListener('scroll',flat_load_script,false);},100);} window.addEventListener('load',flat_load,false);})()</script></body></html>