# Веб-компонент в сборе
В этой главе мы посмотрим на итоговый пример веб-компонента, включающий в себя описанные ранее технологии: Custom Elements, Shadow DOM, CSS Scoping и, конечно же, Imports.
[cut]
## Компонент ui-message
Компонент `ui-message` будет описан в отдельном файле `ui-message.html`.
Его использование будет выглядеть следующим образом:
```html
*!*
Доброе утро, страна!
*/!*
*!*
Внимание-внимание! Говорит информбюро!
*/!*
```
Этот код ничем не отличается от использования обычного элемента, поэтому перейдём дальше, к содержимому `ui-message.html`
## Шаблон для ui-message
Файл `ui-message.html` можно начать с шаблона:
```html
```
Этот шаблон рисует `
` и заполняет его содержимым элемента-хозяина.
Важные детали:
Самое важное правило здесь `:host { display:block }`.
Оно обязательно! . Это правило задаёт, что корень DOM-дерева будет иметь `display:block`. По умолчанию `:host` не создаёт CSS-блок, а это значит, что ни ширину ни отступы указать не получится.
Последующие правила `:host(.info) .content` и `:host(.warning) .content` стилизуют содержимое в зависимости от того, какой на хозяине класс.
## Скрипт для ui-message
В файле `ui-message.html` мы создадим новый элемент ``:
```js
// (1) получить шаблон
var localDocument = document.currentScript.ownerDocument;
var tmpl = localDocument.getElementById('tmpl');
// (2) создать элемент
var MessageProto = Object.create(HTMLElement.prototype);
MessageProto.createdCallback = function() {
var root = this.createShadowRoot();
root.appendChild(tmpl.content.cloneNode(true));
};
// (3) зарегистрировать в DOM
document.registerElement('ui-message', {
prototype: MessageProto
});
```
Все компоненты этого кода мы подробно разбирали ранее:
Получаем шаблон из текущего документа, то есть из самого импорта.
Описываем элемент. Он довольно прост -- при создании записывает в свой `Shadow DOM` шаблон. При этом содержимое исходного элемента будет показано в ``, но делать правила на сам `content` бессмысленно -- они не сработают. Нужно либо перейти внутрь `` при помощи `::content`-селектора, либо указать для внешнего элемента `.content`, что в данном случае и сделано.
С момента регистрации все уже существующие элементы `` будут превращены в описанные здесь. И будущие, конечно, тоже.
Компонент в действии:
[codetabs src="message" height=200]
## Компонент ui-slider с jQuery
Компонент может использовать и внешние библиотеки.
Для примера создадим слайдер с использованием библиотеки [jQuery UI](http://jqueryui.com).
Компонент `ui-slider` будет показывать слайдер с минимальным и максимальным значением из атрибутов `min/max` и генерировать событие `slide` при его перемещении.
Использование:
```html
0
```
## Файл компонента ui-slider
Файл `ui-slider.html`, задающий компонент, мы разберём по частям.
### Заголовок
В начале подключим jQuery и jQuery UI.
Мы импортируем в слайдер `jquery.html`, который содержит теги `