Знакомьтесь, NetBeans и jQuery

jQuery — это небольшая, но мощная библиотека JavaScript, которая позволяет программистам легко и быстро улучшать поведение и внешний вид своих веб-страниц. Синтаксис jQuery отличается лаконичностью и позволяет использовать переменные в виде селекторов CSS. Это очень удобно, особенно, когда вам захочется подключить некоторое действие к DOM-элементам вашего документа. Это можно осуществить по уникальному идентификатору элемента (ID), либо по имени класса для набора элементов, либо по произвольно выбранным селекторам. Так как jQuery написана на JavaScript, то она может быть встроена в любой проект, где возможно использование JavaScript.

В этом уроке показано, как создавать проекты с использованием jQuery, а также преимущества применения NetBeans при разработке пользовательской части приложения, включающей ресурсы HTML, CSS и JavaScript. Будет показано как ускорить написание кода, с помощью вызова автозавершения кода для функций. Вы также познакомитесь с ключевыми понятиями jQuery, в том числе, с вызовом функции $(document).ready, с использованием CSS подобных селекторов для объектов jQuery, а также узнаете как объединять в цепь эффекты jQuery. Ещё вы узнаете о преимуществах библиотеки UI jQuery, создав в документе простой список компьютерных комплектующих «Центральных процессоров» и применив к нему jQuery виджет аккордеон.

Содержание

Чтобы выполнить задания по этому описанию вам потребуются следующие ресурсы:

Программное обеспечение или ресурс Требуемая версия
Denwer (при использовании ОС Windows) 3 +
NetBeans IDE, PHP версия 6.9  +
Java Development Kit (JDK) 6 +
JQuery Core библиотека (Minified либо Uncompressed) 1.4.2 +
JQuery Аккордеон Виджет 1.8.5 +

Примечания:

  • Ресурсы проекта содержащие необходимые jpg-файлы, скачиваем отсюда: LetItBit, VipFile, DepositFiles, TurboBit, UploadBox.
  • Если у вас что-то не получится, вы можете сравнить с рабочим проектом, скачиваем отсюда: LetItBit, VipFile, DepositFiles, TurboBit, UploadBox.
  • Мы предполагаем, что у вас есть базовые знания или опыт программирования с HTML, CSS и JavaScript.
  • Для выполнения упражнений, сейчас и далее, мы будем использовать среду Denwer. Видео-инструкцию по его установке вы можете найти главной странице сайта denwer.ru. Чтобы у нас с вами не было расхождений установите его в папку D:\web

Вернуться к содержанию

Создание и настройка проекта в NetBeans

Цель:

  • Создать проект для сайта
  • Создать в проекте индекс файл с минимальным наполнением.
  1. Начните с создания нового проекта. Выберите Файл > Создать проект (Ctrl-Shift-N).
  2. Мы с вами собираемся разрабатывать проект PHP, поэтому выберите Категорию PHP, а в Проектах выберите Приложение PHP.
  3. Нажмите кнопку Далее и введите Имя проекта jqproject. Кроме этого, укажите каталог на компьютере, где вы хотите сохранить проект (Sources Folder), например, D:\web\home\jqproject. Нажмите кнопку Далее.
  4. На шаге 3 оставляем настройки по умолчанию, кроме поля Project URL, укажите значение http://jqproject/. Кликните Далее.
  5. Нажмите кнопку Завершить. В окне Проекты откроется проект jqproject, а в редакторе откроется файл index.php, автоматически созданный для проекта. Вам его нужно закрыть.
  6. Создайте в проекте простой HTML-файл, над которым вы будете работать в течении этого урока. Так как jQuery, не требует обработки данных на стороне сервера, мы просто будем запускать этот HTML файл в браузере для просмотра результатов. Для этого щелкните правой кнопкой мыши по названию проекта в окне Проекты и выберите Создать > Файл HTML (Ctrl-N).
  7. Укажите Имя файла index, а затем нажмите кнопку Завершить. В окне Проекты, обратите внимание, что появился новый файл index.html. Он добавился к тем файлам, которые уже имелись в проекте, и открылся в редакторе.
  8. Взгляните на то, как начальная страница выглядит в браузере. Для этого щелкните правой кнопкой мыши на index.html в окне Проекты и выберите Просмотр. Вот так эта страницы выглядит в Mozilla Firefox:
  9. Используя редактор NetBeans отредактируйте файл index.html, в контейнере <head> между тегами <title> напишите тестовый проект jQuery после этих тегов создайте пару тегов <style> и </style> добавьте им соответствующий параметр. (Изменения в подсвеченных строках)
    <html>
     <head>
       <title>тестовый проект jQuery</title>
       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
       <style type="text/css">
    
       </style>
     </head>
     <body>
       TODO write content
     </body>
    </html>
    
  10. Настройте проект так, чтобы файл index.html отображался как стартовый файл при запуске веб-приложения. Для этого щелкните правой кнопкой мыши на название jqproject в окне Проекты и выберите пункт Свойства.
    Выберите категорию Выполнить настройку, а затем  в поле Index File введите index.html. И нажмите кнопку OK.
  11. На этом этапе вы можете удалить исходный файл индекса index.php, который был создан вместе с вашим проектом.
    Чтобы удалить файл, перейдите к окну Проекты, нажмите на нём правой кнопкой мыши и выберите Удалить. В диалоговом окне подтверждения, нажмите кнопку Да.

Вернуться к содержанию

Добавление библиотеки jQuery в проект

Цель:

  • скачать файл библиотеки jquery
  • добавить ссылку на библиотеку в документ

Прежде чем мы начнём работать с jQuery, её нужно добавить к проекту. Если вы ещё не сделали этого, скачайте библиотеку jQuery с сайта http://jquery.com/. Прямая ссылка на скачивание:  http://code.jquery.com/jquery-1.4.4.js, браузер откроет этот файл и вам нужно будет сохранить его.

Подсказка: мы выбрали несжатую версию библиотеки (в названии отсутствует слово min). Использование несжатой версии позволит вам изучить JavaScript код в редакторе, и получать помощь в при отладке скриптов.

Чтобы добавить библиотеку jQuery в проект NetBeans, нужно просто сохранить файл библиотеки в папку js своего проекта. Дополнительная информация приведена ниже.

  1. В NetBeans, создайте папку с именем js. Для этого щелкните на панели инструментов по кнопке  Новый файл (вместо этого, можно нажать — Ctrl-N)
  2. Выберите категорию: Другое, а затем выберите Папку.
  3. Название папке дадим: js.
  4. Нажмите кнопку Готово, чтобы завершить работу мастера.
  5. Найдите открытую библиотеку jQuery в браузере. На сегодняшний день, текущая версия библиотеки 1.4.4, поэтому файл, скорее всего называется jquery-1.4.4.js.
  6. Выберите в контекстном меню Сохранить как. Укажите js в качестве папки назначения, а имя файла — jquery.js. Он появится в папке js в виде узла PHP проекта:
  7. Давайте добавим ссылку на библиотеку jQuery в файл index.html. Чтобы сделать это, добавьте пару тегов <script> и определите атрибут src, указав относительный путь к библиотеке. (Изменения в подсвеченных строках)
    <html>
     <head>
       <title>тестовый проект jQuery</title>
       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
       <script type="text/javascript" src="js/jquery.js"></script>
       <style type="text/css">
    
       </style>
     </head>
     ...
    
  8. Сохраните файл (Ctrl-S).

Библиотека jQuery теперь включена в проект jqproject, за счёт использования ссылки в нашем файле index.html. Теперь мы можем начать добавлять код, использующий jQuery в нашу страницу.

Вернуться к содержанию

Знакомство с jQuery

Цель:

  • подключить к заголовку документа цепочку функций — подключение класса оформления и исчезновение элемента

jQuery осуществляет свою работу за счёт подключения, посредством JavaScript, атрибутов и поведения к элементам DOM (Document Object Model). Давайте добавим элемент к DOM и попытаемся повлиять на его свойства. Мы создадим заголовок, который меняет свой цвет с черного на голубой, когда происходит нажатие на него.

  1. Создадим элемент структуры документа <h1> — заголовок. Удалите ‘TODO write content’ и введите следующую строку между тегами <body>:
    <h1>Проверка.</h1>
  2. Теперь мы создадим CSS класс, который, когда применяется, делает текст элемента синим. Введите следующую строку между тегами <style> в контейнере <head> документа:
    .blue { color: blue; }
  3. Далее нам нужно создать место для размещения наших команд jQuery. Добавьте новые теги <script> в <head> документа, например, после тегов <script>, в которых есть ссылка на библиотеку jQuery. (Изменения в подсвеченных строках)
    <html>
       <head>
           <title>тестовый проект jQuery</title>
           <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
           <script type="text/javascript" src="js/jquery-1.3.2.js"></script>
    
           <script type="text/javascript">
    
           </script>
    
           <style type="text/css">
               .blue { color: blue; }
           </style>
       </head>
       ...
    
    Подсказка: вы можете сделать свой код более привлекательным, выделив его, щелкнув правой кнопкой мыши в редакторе и выбрав Формат.

    Инструкции, использующие jQuery, которые мы будем добавлять, должны быть выполнены только после получения всех элементов DOM браузером. Это важно, так как jQuery подключает поведение к элементам DOM, и эти элементы должны быть доступны для jQuery, чтобы не возникло ошибки. Об этом также позаботится jQuery через свою встроенную функцию (document).ready, которая следует сразу за jQuery объектом — $.

  4. Введите эту конструкцию между тегами скрипта, которые вы только что создали:
    $(document).ready(function(){
    });
     

    Подсказка: существует также сокращенный вариант этой функции:
    $(function(){
    });

    Инструкции для jQuery должны находится в функции JavaScript, которой с помощью дополнительного объекта можно передать массив параметров; они должны быть размещены в фигурных скобках {} внутри функции (document).ready, тогда инструкции будут выполнены только в нужное время, после полной загрузки DOM.
    На данном этапе файл index.html должен выглядеть следующим образом:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
       <head>
           <title>тестовый проект jQuery</title>
           <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
           <script type="text/javascript" src="js/jquery-1.3.2.js"></script>
    
           <script type="text/javascript">
               $(document).ready(function(){
    
               });
           </script>
    
           <style type="text/css">
               .blue { color: blue; }
           </style>
       </head>
       <body>
           <h1>Проверка.</h1>
       </body>
    </html>
    
  5. Чтобы продемонстрировать, как работает jQuery, давайте попробуем сделать что-нибудь простое. Мы добавим инструкции jQuery на нашу страницу, которые будут делать слово Проверка синим цветом, при нажатии на него. Чтобы этого достигнуть, мы укажем jQuery добавлять класс CSS .blue к <h1> элементу в DOM, когда по нему кликает мышь.
    Введите следующий код внутри функции (document).ready, в фигурных скобках {}:

    $("h1").click(function(){
        $(this).addClass("blue");
    });
    
  6. Сохраните документ, и откройте его в веб-браузере. Проверьте, как всё это работает. Когда вы нажимаете на слово Проверка, оно должно синеть.

    Этот пример использует jQuery функцию click(), обращающуюся к функции jQuery addClass(), когда встречается элемент, соответствующий селектору CSS h1. Выражение $(this) ссылается на вызывающий элемент. Если бы нам пришлось ещё добавлять элементы <h1> на нашу страницу, то такое же поведение было бы у всех, и при этом каждый из них взаимодействовал бы с jQuery самостоятельно. (Вы можете попробовать это самостоятельно, в качестве быстрого упражнения.)
  7. Ещё одним важным качеством jQuery является то, что его функции могут быть просто соединены в цепочку для создания более сложных эффектов или последовательного их выполнения. Чтобы продемонстрировать это, давайте добавим инструкцию jQuery в нашу функцию click(), которая медленно растворит заголовок с помощью функции fadeOut(). Разместите функцию jQuery fadeOut(«slow») сразу за функцией addClass, так что бы строка кода выглядела так:
    $(this).addClass(«blue»).fadeOut(«slow»);
    Функция выполняющаяся после загрузки документа, должна выглядеть так:

    $(document).ready(function(){
       $("h1").click(function(){
           $(this).addClass("blue").fadeOut("slow");
       });
    });
    
  8. Затем, в браузере обновите страницу, а после этого нажмите по заголовку Проверка. Вы увидите, что он становится синим, а затем исчезает со страницы. (Чтобы это сделать ещё раз, необходимо обновить страницу.)
  9. Теперь превратим наш курсор в руку при наведении на слово Проверка. Для этого в контейнере style, сразу после правила для класса blue напишите следующее (изменения в подсвеченной строке):
    <style type="text/css">
       .blue { color: blue; }
       h1 { cursor: pointer; }
    </style>
    

    Мы указали стиль курсора для заголовка h1, поэтому курсор становится рукой именно при наведении на слово Проверка, которое является заголовком h1:

Автозавершение кода в NetBeans и поддержка API


Всякий раз, когда вы набираете текст в редакторе, вы можете вызвать автозавершение кода нажатием клавиш Ctrl-Space. IDE предоставит вам перечень вариантов завершения начатого слова (среди которых вы можете выбрать нужный). А также IDE покажет окно документации API, описывающее текущий выбранный элемент, показывающее фрагменты примеров кода, и предоставляющее список браузеров, которые поддерживают данный код.
Вы можете указать целевые браузеры для автозавершения кода и документацию для определённой версии API JavaScript, в окне параметров IDE. Выберите Сервис > Настройки, а затем выберите Разное > JavaScript.

Вернуться к содержанию

Добавление в проект jQuery Виджета — Аккордеон.

Цель:

  • создать страницу со списком процессоров
  • применить к списку виджет — Аккордеон

До этого мы просто проверяли возможности JavaScript, которые включены в ядро библиотеки jQuery. Теперь давайте рассмотрим более реальный пример, создав список процессоров, за основу возьмём HTML-разметку. После этого мы применим к нему jQuery виджет аккордеон.
Виджет аккордеон, является частью библиотеки UI jQuery. Эта библиотека обладает ядром, окружённым модулями, чтобы дать вам возможность управлять взаимодействием, виджетами и эффектами на веб-страницах. Вы можете минимизировать размер файла библиотеки, выбрав только те компоненты, которые вам необходимы для интерфейса.
Если вы ещё не сделали этого, посетите страницу http://jqueryui.com/download и скачайте виджет аккордеон для навигации по странице. Снимите флажки со всех выбранных пунктов, затем выберите нужный вам виджет. Обратите внимание, что при выборе виджета аккордеон, автоматически выбирается ядро библиотеки UI и фабрика виджетов. Отметим также, что на этой странице, по умолчанию выбрана тема UI lightness, которая включена в пакет загрузки. Мы применим эту тему к нашему списку продуктов в следующем разделе. Сохраните архив с виджетом, где вам удобно, распакуйте его в папку accordion. Некоторые файлы из этой папки нам понадобятся в будущем.

  1. Вставьте следующий код в документ вместо <h1>Проверка.</h1>.
    <div id="infolist">
    <h3><a href="#">Athlon II X2</a></h3>
      <div>
         <img src="pix/athlon.jpg" alt="Athlon II X2">
         <ul>
            <li><h4>AMD</h4></li>
            <li><b>Сокет:</b> AM3</li>
            <li><b>Частота:</b> 2700 МГц</li>
         </ul>
         <br clear="all">
      </div>
      <h3><a href="#">Sempron 140</a></h3>
      <div>
         <img src="pix/sempron.jpg" alt="">
         <ul>
            <li><h4>AMD</h4></li>
            <li><b>Сокет:</b> AM3</li>
                    <li><b>Частота:</b> 2700 МГц</li>
         </ul>
         <br clear="all">
      </div>
      <h3><a href="#">Seleron E3500</a></h3>
      <div>
         <img src="pix/seleron.jpg" alt="">
         <ul>
            <li><h4>Intel</h4></li>
            <li><b>Сокет:</b> LGA775</li>
                    <li><b>Частота:</b> 2700 МГц</li>
         </ul>
         <br clear="all">
      </div>
      <h3><a href="#">Pentium E6800</a></h3>
      <div>
         <img src="pix/pentium.jpg" alt="">
         <ul>
            <li><h4>Intel</h4></li>
            <li><b>Сокет:</b> LGA775</li>
                    <li><b>Частота:</b> 3333 МГц</li>
         </ul>
         <br clear="all">
      </div>
    </div>
    

    Обратите внимание, что у элемента <div>, вмещающего остальные элементы, атрибут идентификатор имеет значение infolist. В этом <div> есть четыре группы тегов <h3> и <div>, которые содержат изображения и неупорядоченный список.

  2. Добавьте несколько CSS правил. Предварительно удалите правила, устанавливающее синий цвет для текста у элементов класса blue, и превращающее курсор в руку, они нам не потребуются. Вместо них добавьте следующие правила. (Изменения подсвечены)
    <style type="text/css">
      ul {list-style-type: none}
      img {padding-right: 20px; float:left}
      #infolist {width:500px}
    </style>
    
    Подсказка: при написании CSS-правил в тегах <style>, воспользуйтесь автозавершением кода, нажимая Ctrl-пробел.
  3. Сохраните файл (Ctrl-S).
  4. Теперь мы добавим к нашему проекту папку с картинками, на которые есть ссылки в приведенном выше фрагменте HTML-кода. Возьмите папку pix, из архива ресурсов проекта (ссылка на архив), который вы скачали ранее и скопируйте её в папку вашего проекта, в которой лежит index.html. NetBeans автоматически обновляет окно проекта и вскоре вы увидете, что новый каталог появился в проекте.
  5. Перейдите к вашему браузеру и обновите страницу.

    У этого документа есть проблемы с внешним видом. Во-первых, это трудности при поиске нужного вам процессора: надо прокручивать страницу и просмотреть много информации, которая не представляет для вас особого интереса. Возможно, что списком из четыре процессоров ещё можно управлять, но если их число возрастёт, скажем, до 50, то список станет намного сложнее в использовании. Во-вторых, документ выглядит плоско и может не вписаться в эстетику дизайна большинства веб-сайтов, в частности, в проекты, которые имеют сильный графический уклон. Мы будем решать эти вопросы с помощью виджета jQuery аккордеон в сочетании с темой по умолчанию, которую предлагает UI jQuery.
  6. Для создания эффекта аккордеона перейдите в папку на компьютере, куда вы скачали виджет аккордеон. В скачанной папке вы сможете найти папку с именем development-bundle. Внутри этой папки найдите папку ui, разверните её и найдите там следующие три скрипта:
    • jquery.ui.core.js
    • jquery.ui.widget.js
    • jquery.ui.accordion.js
    Подсказка: версия набора инструментальных средств для разработчика не минимизирована, а это означает, что код таких сценариев будет понятен человеку при просмотре в редакторе. Как правило, вы потом захотите перейти к сжатой версии скриптов, чтобы свести к минимуму время загрузки библиотеки.
  7. Скопируйте эти файлы. Затем вернувшись в IDE, вставьте их в папку js, которая находится в папке проекта. Вы можете их вставить либо нажав сочетание Ctrl-V, либо нажав правой кнопкой мыши на папку js и выбрав Вставить.
    Подсказка: папка ui также содержит файл с именем jquery-ui-1.8.7.custom.js. Этот файл сочетает в себе три перечисленных выше сценария. Вы могли бы также вставить этот файл в ваш проект вместо отдельных сценариев.
  8. Подключите скрипты в вашем файле index.html, введя три тега <script> со ссылками на эти новые файлы JavaScript. Добавьте их сразу после тега, в котором подключается библиотека jquery.js. Используйте существующий тег <script> в качестве образца.
  9. Удалите код, внутри функции $(document).ready(). Вам он больше не нужен.
    Контейнер <head> вашего файла, должен выглядеть следующим образом:

    <head>
      <title>тестовый проект jQuery</title>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <script type="text/javascript" src="js/jquery.js"></script>
      <script type="text/javascript" src="js/jquery.ui.core.js"></script>
      <script type="text/javascript" src="js/jquery.ui.widget.js"></script>
      <script type="text/javascript" src="js/jquery.ui.accordion.js"></script>
      <script type="text/javascript">
          $(document).ready(function(){
    
          });
      </script>
    </head>
    
  10. Чтобы превратить наш статический, лишённый стиля список в «аккордеон», нужно добавить всего одну строку кода. Введите этот код в функцию ready. (Изменения подсвечены)
    $(document).ready(function(){
      $("#infolist").accordion({
          autoHeight: false
      });
    });
    

    В этой строке кода, #infolist является CSS селектором, который связан с элементом DOM, у которого атрибут id имеет значение infolist. Этот элемент связывается обычной JavaScript точечной нотацией «.» с jQuery инструкцией, которая использует метод accordion() для показа этого элемента.

    Подсказка: вы также указали autoHeight:false в приведённом выше фрагменте. Это предотвращает аккордеон виджет от установки высоты каждой панели на основе самой высокой его части. Для получения дополнительной информации, обратитесь к документации API аккордеона.
  11. Сохраните файл.
  12. Вернитесь к веб-браузеру и обновите его. Нажмите на одно из названий (кроме верхнего), чтобы увидеть эффект аккордеона в действии. jQuery виджет аккордеон обрабатывает все детали DOM и реагирует на клики мышкой.

Вернуться к содержанию

Использование готовой темы jQuery для улучшения стиля

Цель:

  • добавить таблицу стилей и картинки для неё

Наш проект в настоящее время ведёт себя так, как мы хотим, но выглядит он довольно скучно. Давайте изменим это, включив по умолчанию jQuery тему UI lightness.

  1. Перейдите в папку на компьютере, куда вы скачали виджет аккордеон. И зайдите в папку development-bundle > themes > ui-lightness.
  2. В папке ui-lightness, скопируйте файл jquery-ui-1.8.7.custom.css и папку images, которая содержит все изображения, необходимые для отрисовки темы надлежащим образом. Для этого выделите папку и файл css и нажмите Ctrl-C.
  3. Перейдите в IDE, создайте там новую папку в вашем проекте с именем css. Эта папка будет содержать тему UI lightness для виджета аккордеона.
    Для этого щелкните правой кнопкой мыши на узел проекта и выберите Создать > Папку. Если папка не отображается в качестве опции, щелкните по кнопке новый файл (Добавить css и обратите внимание на то, чтобы она была помещена в тот же каталог, что и ваш файл index.html.
  4. Вставьте, из буфера обмена, папку и файл css, непосредственно в новую папку css. Для этого щелкните правой кнопкой мыши по узлу папки и выберите Вставить. Переименуйте файл jquery-ui-1.8.7.custom.css в jquery-ui-custom.css, для этого кликните по нему и нажмите F2. Папка проекта должна выглядеть следующим образом:
  5. Включите jquery-ui-custom.css файл в вашу веб-страницу. Добавьте для этого тег <link> в контейнер head страницы.
    <link rel=»stylesheet» href=»css/jquery-ui-custom.css» type=»text/css»>
  6. Сохраните файл (Ctrl-S).
  7. Вернитесь к веб-браузеру и обновите страницу. Обратите внимание, что список теперь отображается с использованием jQuery темы по умолчанию, которая улучшает эстетическую составляющую списка.

Вернуться к содержанию

Подведём итоги

В этом уроке вы узнали, как добавлять библиотеки jQuery в ваш проект, а также, как писать некоторые основные инструкции используя синтаксис jQuery. Вы также узнали, как jQuery взаимодействует с DOM с помощью переменных, которые похожи на CSS селекторы, влияющих на внешний вид и поведение элементов на веб-странице.
Наконец, вы кратко изучили возможности библиотеки UI jQuery, применив виджет аккордеон для простого списка процессоров. После внедрения эффекта аккордеон, вы применили к нему стандартный стиль jQuery. Теперь вы должны лучше понимать, как jQuery может быть использован для создания динамических веб-страниц, улучшая при этом внешний вид и эргономичность.

Вернуться к содержанию

Понравилась статья? Посоветуйте другу

Количество коментариев: 3

  1. Спасибо! Как раз то, что я искал. Потихоньку осваиваю NetBeans и просто в восторге от этой IDE! Перепробовал ряд коммерческих продуктов. У всех свои + и -. А NetBeans и бесплатен, и функционал на высоте.

  2. Супер статья! Задумался об изучении Jquery заодно и на Netbeans перехожу, то что надо!

  3. Дмитрий Артанов Дмитрий Артанов

    Сообщение появилось в отзывах, от Андрея
    «У меня такая проблема выскакивает ошибка NetBeans невозможно создать процесс проверьте конфигурацию браузера подскажите зарание спасибо!»
    Андрей, как любят выражаться на форумах:
    «Все телепаты в отпуске» 😉
    Я надеюсь вы увидите этот комментарий, опишите условия при которых возникает это событие

Добавить комментарий



[ Ctrl + Enter ]