<h1 class="w-title __w-first">Знакомство</h1>

<p>Легковесный и мощный Ember Addon позволяющий легко создавать <b>кроссроутные</b> диалоговые окна и программно контролировать их закрытие. Он состоит из сервиса, через который они создаются, и компонента - непосредственно самого диалогового окна (с нужным лейаутом и шаблоном).</p>

<p>Сразу к делу, как они выглядят? Можете сами взглянуть: <a class="w-link w-link__pseudo" onclick={{action "showAlert"}}>alert</a>, <a class="w-link w-link__pseudo" onclick={{action "showConfirm"}}>confirm</a> и <a class="w-link w-link__pseudo" onclick={{action "showBlank"}}>blank</a>.</p>

<p>С помощью ember-dialog вы можете создавать любые всплавающие интерфейсы: диалоговые окна, модалки, предупреждения, баблы и т.п. Для минимизации кода библиотеки мы не стали включать их реализацию в проект, но постарались максимально подробно описать как это сделать в вашем проекте (см. разделы {{#link-to 'cookbook'}}{{t "navigation.cookbook"}}{{/link-to}} и {{#link-to 'tutorial'}}{{t "navigation.tutorial"}}{{/link-to}}). Также вы можете заглянуть в код библиотеки, вы будете приятно удивлены тем, каким количеством кода обеспечены описанные на этом сайте возможности.</p>

<h2 class="w-subtitle">Установка</h2>

<p>Установка аддона такая же простая как:</p>
<pre data-src="examples/getting-started/installation-1.bash"></pre>

<p>Вы увидите что-то типа:</p>
<pre data-src="examples/getting-started/installation-2.bash"></pre>

<h2 class="w-subtitle">Концепция</h2>

<p>Принцип работы очень прост. У менеджера диалоговых окон вызывается один из методов (`show`, `alert`, `confirm` или `blank`), он создает компонент с нужными layout и template. Далее рендерит его и прикрепляет к body. Также создается Promise, resolve и reject методы которого кладутся в компонент, он же и возвращается из метода, для того чтобы подпрограмма которая запросила его создание могла узнать с каким результатом диалоговое окно закрылось. Каждый компонент (рабочее название Presenter) имеет 2 метода: один для accept-закрытия, другое для decline-закрытия. Эти методы доступны из шаблона и могут быть подвязаны к действиям пользователя, например при нажатии на какую-то кнопку внутри диалогового окна (в лейауте или шаблоне). Эти методы вызывают соответствующие методы самого Promise (который мы получили при создании модального окна, помните?), также компонент отстреливает соответствующее событие "accepted" или "declined". Менеджер диалоговых окон ловит эти события и по ним уничтожает компонент, происходит его открепление от DOM - оно исчезает. Все просто, не так ли? :)</p>

<p>Давайте представим, что вы хотите попросить пользователя подтвердить какое-то действие. Ему нужно показать модельное окно, для этого нужно вызвать метод `show` с нужным layout (нам нужно окно с 2 кнопкам: да и нет - лейаут `dialog/confirm` как раз создан для этого, давайте использовать его) и путь до шаблона, который мы хотим показать пользователю в модальном окне (сразу оговорюсь, что можно указать не путь до шаблона, а сам шаблон, почитать об этом вы можете здесь). Вызванный метод `show` создает и показывает пользователю модальное окно и возвращает нам Promise, который станет resolved или rejected при закрытии окна в соответствии с нажатой кнопкой (yes или no). Пример:</p>

<pre data-src="examples/getting-started/example-1.javascript" data-line="7" class="line-numbers"></pre>

<p>Метод `show` позволяет создавать различные типы диалоговых окон, используя различные layouts: с разным количеством кнопок, разлиными способами вывода на экран и пр. Мы предусмотрели наиболее частые варианты модальных окон: alert, confirm и blank. Так, что каждый раз указывать один и тот же лейаут в разных местах программы не обязательно, смотри пример:</p>

<pre data-src="examples/getting-started/example-2.javascript" class="line-numbers"></pre>

<p>Куда дальше идти? Вы можете посетить страницу {{#link-to 'tutorial' class="w-link"}}{{t "navigation.tutorial"}}{{/link-to}}, {{#link-to 'cookbook' class="w-link"}}{{t "navigation.cookbook"}}{{/link-to}} или покопаться в <a href="docs" class="w-link">документации</a>. Если у вас еще остались вопросы, пожалуйста, пишите issue - попробует вместе решить ваш use case.</p>

<p>Удачного пользования!</p>
