SlideShare una empresa de Scribd logo
1 de 29
Descargar para leer sin conexión
Emmet как платформа
для инструментов
Сергей Чикуёнок | http://emmet.io
Что такое Emmet?
• Инструмент для ускорения работы с HTML и CSS
• Плагин для множества популярных редакторов кода
• Написан на чистом JavaScript, легко встраивается
Что такое Emmet?
Развитие инструментов для
фронт-энд разработчиков
1990-е: Microsoft FrontPage
2000-е: Ъ-кодеры пишут в «Блокноте»
2010-е: Sublime Text,WebIDE
Sublime Text WebIDE
• быстрый
• красивый
• классный API
• удобный автокомплит
• кроссплатформенный
• богатый функционал
• много хорошо интегрированных
инструментов
• удобная отладка
С точки зрения фронт-энд
разработчика:
Sublime Text WebIDE
• только раскрашивает HTML и CSS
• API работает с обычным текстом
• Java
• медленная
• API позволяет работать с AST, но
это очень сложно
• разработчики акцентируют
внимание на других вещах
Код по-прежнему долго писать
и тяжело редактировать
Выход?
Препроцессоры!
Преимущества:
• Короткая нотация, быстрее писать
• Читабельность
• Синтаксический сахар
• Шаблонизация, связь с внешними данными
Недостатки:
• Сложная отладка кода
• Не решают проблему редактирования существующего
кода
• Не всегда можно использовать на клиенте
Чего хочется:
• писать меньше кода
• работать в любимом редакторе
• разрабатывать инструменты на JavaScript
• работать с HTML и CSS как с DOM
Emmet – платформа для
инструментов
веб-разработчика
Emmet как платформа
• модульная архитектура
• написан на JavaScript
• поддержка большого количества редакторов
•поддержка расширений
Расширения Emmet
• Обычные .js и .json-файлы в специальной папке
• Загружаются автоматически
• Могут дополнять или переопределять основной
функционал
• Одинаково работают в разных редакторах
Основные модули
• разбор и преобразование аббревиатур
• поиск пар тэгов в коде
• работа с HTML-тэгами и CSS-правилами через DOM-
подобный интерфейс
Как из аббревиатур
получается HTML-код
Разбор аббревиатуры в дерево
Нормализация дерева
Формирование текстового результата
Готовый код
Как из аббревиатур
получается HTML-код
Разбор аббревиатуры в дерево
Нормализация дерева
Формирование текстового результата
Готовый код
препроцессоры
постпроцессоры
фильтры
emmet.exec(function(require, _) {
require('filters').add('my_filter', function process(tree, profile) {
_.each(tree.children, function(item) {
// пример для HTML
item.start = '<' + item.name() + '>';
item.end = '</' + item.name() + '>';
// пример для Jade
item.start = item.name() + 'n';
item.padding = 't';
// преобразуем уже существующий результат
item.start = item.start.replace(/</g, '&lt;').replace(/>/g, '&gt;');
// рекурсивное преобразование всего дерева
process(item, profile);
});
});
});
Пример фильтра
div>em|my_filter
var tag = emmet.require('htmlMatcher').tag(
'hello <em>world</em>', // текст, где искать тэг
12 // позиция, с которой начать поиск
);
tag.open = { // открывающий тэг
name: 'em',
selfClose: false, // является ли тэг самозакрывающимся
range: new Range() // {start: 6, end: 10}
};
tag.close = {...}; // закрывающий тэг
tag.innerRange = new Range(); // {start: 10, end: 15}
tag.innerContent = function(){}; // world
tag.outerRange = new Range(); // {start: 6, end: 20}
tag.outerContent = function(){}; // <em>world</em>
tag.range = innerRange || outerRange;
tag.content = innerContent || outerContent;
Получение HTML-тэга
emmet.exec(function(require, _) {
require('actions').add('rename_tag', function(editor) {
var tag = require('htmlMatcher').tag(editor.getContent(), editor.getCaretPos());
if (tag) {
var newName = editor.prompt('Введите новое имя тэга');
if (tag.close) {
editor.replaceContent(
'</' + newName + '>',
tag.close.range.start,
tag.close.range.end);
}
editor.replaceContent(
'<' + newName,
tag.open.range.start,
tag.open.range.start + tag.open.name.length + 1);
}
});
});
Пример: переименование тэга
Интерфейс для редактирования
HTML и CSS
(EditTree)
• Интерфейс для высокоуровнего редактирования HTML-
тэгов и CSS-правил
• Похож на DOM
• Предоставляет доступ ко всем атрибутам/свойствам
контейнера, а также их диапазонам
•Учитывает форматирование кода
var tree = emmet.require('xmlEditTree')
.parse('<tag attr1="val1" attr2="val2">');
tree.value('attr1'); // val1
tree.get('attr1').range(); // {start: 5, end: 17}
tree.value('attr1', 'Hello world');
tree.remove('attr2');
tree.add('a', 'b', 0);
tree.source; // <tag a="b" attr1="Hello world">
Редактирование HTML
(xmlEditTree)
var tree = emmet.require('cssEditTree').parse('div {color: red}');
// можно использовать метод parseFromPosition(content, pos)
// для получения правила из документа
tree.value('color', 'black');
tree.value('position', 'relative');
tree.source; // div {color: black;position: relative;}
Редактирование CSS
(cssEditTree)
Только вы сами можете
создавать лучшие
инструменты
Вопросы?
serge.che@gmail.com
http://emmet.io
@emmetio

Más contenido relacionado

La actualidad más candente

Дополнительные приёмы работы в DOM
Дополнительные приёмы работы в DOMДополнительные приёмы работы в DOM
Дополнительные приёмы работы в DOMDenis Latushkin
 
HTML5 Web Components: следующий шаг к модульности вашего проекта / Андрей Рах...
HTML5 Web Components: следующий шаг к модульности вашего проекта / Андрей Рах...HTML5 Web Components: следующий шаг к модульности вашего проекта / Андрей Рах...
HTML5 Web Components: следующий шаг к модульности вашего проекта / Андрей Рах...Ontico
 
Alexander manuhin selenium_php_v2.0
Alexander manuhin selenium_php_v2.0Alexander manuhin selenium_php_v2.0
Alexander manuhin selenium_php_v2.0matroskin1980
 
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
«Изоморфные js приложения с использованием catberry.js», Денис РечкуновDevDay
 
TestGuy - эмулируем вашего тестировщика
TestGuy - эмулируем вашего тестировщикаTestGuy - эмулируем вашего тестировщика
TestGuy - эмулируем вашего тестировщикаdavertmik
 
dont badmouth mojo
dont badmouth mojodont badmouth mojo
dont badmouth mojoAnton Ukolov
 
Php intro rus
Php intro rusPhp intro rus
Php intro rusaDDDitive
 
i18n for Plugin and Theme Developers, WordCamp Moscow 2016
i18n for Plugin and Theme Developers, WordCamp Moscow 2016i18n for Plugin and Theme Developers, WordCamp Moscow 2016
i18n for Plugin and Theme Developers, WordCamp Moscow 2016Sergey Biryukov
 
Самодельная параметризация и параллелизация тестов на Webdriver (JS)
Самодельная параметризация и параллелизация тестов на Webdriver (JS) Самодельная параметризация и параллелизация тестов на Webdriver (JS)
Самодельная параметризация и параллелизация тестов на Webdriver (JS) COMAQA.BY
 
Александр Тармолов "БЭМ и JavaScript: Тестирование"
Александр Тармолов "БЭМ и JavaScript: Тестирование"Александр Тармолов "БЭМ и JavaScript: Тестирование"
Александр Тармолов "БЭМ и JavaScript: Тестирование"Yandex
 
Инструментируй это
Инструментируй этоИнструментируй это
Инструментируй этоRoman Dvornov
 
Руководство по приготовлению бутербродов из Selenium
Руководство по приготовлению бутербродов из SeleniumРуководство по приготовлению бутербродов из Selenium
Руководство по приготовлению бутербродов из SeleniumUladzimir Kryvenka
 
Автоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows PhoneАвтоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows PhoneCodeFest
 
Knockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-ОнлайнKnockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-Онлайн2ГИС Технологии
 
Контроль качества верстки или как начать делать Makeup
Контроль качества верстки или как начать делать MakeupКонтроль качества верстки или как начать делать Makeup
Контроль качества верстки или как начать делать MakeupTimophy Chaptykov
 
Everything You Need to Know About WP_Query, WordCamp Russia 2014
Everything You Need to Know About WP_Query, WordCamp Russia 2014Everything You Need to Know About WP_Query, WordCamp Russia 2014
Everything You Need to Know About WP_Query, WordCamp Russia 2014Sergey Biryukov
 

La actualidad más candente (20)

Дополнительные приёмы работы в DOM
Дополнительные приёмы работы в DOMДополнительные приёмы работы в DOM
Дополнительные приёмы работы в DOM
 
Kranonit s16 (python). dmitry furzenko
Kranonit s16 (python). dmitry furzenkoKranonit s16 (python). dmitry furzenko
Kranonit s16 (python). dmitry furzenko
 
HTML5 Web Components: следующий шаг к модульности вашего проекта / Андрей Рах...
HTML5 Web Components: следующий шаг к модульности вашего проекта / Андрей Рах...HTML5 Web Components: следующий шаг к модульности вашего проекта / Андрей Рах...
HTML5 Web Components: следующий шаг к модульности вашего проекта / Андрей Рах...
 
Alexander manuhin selenium_php_v2.0
Alexander manuhin selenium_php_v2.0Alexander manuhin selenium_php_v2.0
Alexander manuhin selenium_php_v2.0
 
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
 
TestGuy - эмулируем вашего тестировщика
TestGuy - эмулируем вашего тестировщикаTestGuy - эмулируем вашего тестировщика
TestGuy - эмулируем вашего тестировщика
 
Введение в Django
Введение в DjangoВведение в Django
Введение в Django
 
dont badmouth mojo
dont badmouth mojodont badmouth mojo
dont badmouth mojo
 
Php intro rus
Php intro rusPhp intro rus
Php intro rus
 
i18n for Plugin and Theme Developers, WordCamp Moscow 2016
i18n for Plugin and Theme Developers, WordCamp Moscow 2016i18n for Plugin and Theme Developers, WordCamp Moscow 2016
i18n for Plugin and Theme Developers, WordCamp Moscow 2016
 
Самодельная параметризация и параллелизация тестов на Webdriver (JS)
Самодельная параметризация и параллелизация тестов на Webdriver (JS) Самодельная параметризация и параллелизация тестов на Webdriver (JS)
Самодельная параметризация и параллелизация тестов на Webdriver (JS)
 
Александр Тармолов "БЭМ и JavaScript: Тестирование"
Александр Тармолов "БЭМ и JavaScript: Тестирование"Александр Тармолов "БЭМ и JavaScript: Тестирование"
Александр Тармолов "БЭМ и JavaScript: Тестирование"
 
Selenium vs AJAX
Selenium vs AJAXSelenium vs AJAX
Selenium vs AJAX
 
Инструментируй это
Инструментируй этоИнструментируй это
Инструментируй это
 
BDD для PHP проектов
BDD для PHP проектовBDD для PHP проектов
BDD для PHP проектов
 
Руководство по приготовлению бутербродов из Selenium
Руководство по приготовлению бутербродов из SeleniumРуководство по приготовлению бутербродов из Selenium
Руководство по приготовлению бутербродов из Selenium
 
Автоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows PhoneАвтоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows Phone
 
Knockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-ОнлайнKnockoutjs на примере 2ГИС-Онлайн
Knockoutjs на примере 2ГИС-Онлайн
 
Контроль качества верстки или как начать делать Makeup
Контроль качества верстки или как начать делать MakeupКонтроль качества верстки или как начать делать Makeup
Контроль качества верстки или как начать делать Makeup
 
Everything You Need to Know About WP_Query, WordCamp Russia 2014
Everything You Need to Know About WP_Query, WordCamp Russia 2014Everything You Need to Know About WP_Query, WordCamp Russia 2014
Everything You Need to Know About WP_Query, WordCamp Russia 2014
 

Similar a Emmet - инструмент для веб-разработчика

Zend Framework и мультиязычность
Zend Framework и мультиязычностьZend Framework и мультиязычность
Zend Framework и мультиязычностьStepan Tanasiychuk
 
Client Side Autotesting Flash
Client Side Autotesting FlashClient Side Autotesting Flash
Client Side Autotesting Flashguestb0af15
 
ZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and DoctrineZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and DoctrineZFConf Conference
 
ZFConf 2010: Zend Framework and Multilingual
ZFConf 2010: Zend Framework and MultilingualZFConf 2010: Zend Framework and Multilingual
ZFConf 2010: Zend Framework and MultilingualZFConf Conference
 
Методики «Inversion of Control» и «Dependency Injection». Применение в Spring.
Методики «Inversion of Control» и «Dependency Injection». Применение в Spring.Методики «Inversion of Control» и «Dependency Injection». Применение в Spring.
Методики «Inversion of Control» и «Dependency Injection». Применение в Spring.Fedor Malyshkin
 
Профилирование и оптимизация jQuery–кода
Профилирование и оптимизация jQuery–кодаПрофилирование и оптимизация jQuery–кода
Профилирование и оптимизация jQuery–кодаprivate_face
 
Профилирование и оптимизация jQuery–кода (Владимир Журавлёв)
Профилирование и оптимизация jQuery–кода (Владимир Журавлёв)Профилирование и оптимизация jQuery–кода (Владимир Журавлёв)
Профилирование и оптимизация jQuery–кода (Владимир Журавлёв)Ontico
 
Selenium 2.0: обзор новых возможностей
Selenium 2.0: обзор новых возможностейSelenium 2.0: обзор новых возможностей
Selenium 2.0: обзор новых возможностейPaul Stashevsky
 
Rich UI on Dojo Toolkit and Zend Framework
Rich UI on Dojo Toolkit and Zend FrameworkRich UI on Dojo Toolkit and Zend Framework
Rich UI on Dojo Toolkit and Zend FrameworkGeorgy Turevich
 
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИСTARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС2ГИС Технологии
 
Баба-Яга против! — Роман Дворнов, Ostrovok.ru
Баба-Яга против! — Роман Дворнов, Ostrovok.ruБаба-Яга против! — Роман Дворнов, Ostrovok.ru
Баба-Яга против! — Роман Дворнов, Ostrovok.ruYandex
 
ASP.NET MVC - как построить по-настоящему гибкое веб-приложение
ASP.NET MVC - как построить по-настоящему гибкое веб-приложениеASP.NET MVC - как построить по-настоящему гибкое веб-приложение
ASP.NET MVC - как построить по-настоящему гибкое веб-приложениеAlexander Byndyu
 
Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
Компонентная разработка на Stylus, Jade, Typescript - Леонид ШирмановКомпонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
Компонентная разработка на Stylus, Jade, Typescript - Леонид ШирмановMoscowJS
 
Что нового в Visual Studio 2010 и .Net 4.0
Что нового в Visual Studio 2010 и .Net 4.0Что нового в Visual Studio 2010 и .Net 4.0
Что нового в Visual Studio 2010 и .Net 4.0akrakovetsky
 
Take more from Jquery
Take more from JqueryTake more from Jquery
Take more from JqueryMagento Dev
 
Профилирования и оптимизация jQuery-кода
Профилирования и оптимизация jQuery-кодаПрофилирования и оптимизация jQuery-кода
Профилирования и оптимизация jQuery-кодаprivate_face
 
Тема 1. Введение в HTML
Тема 1. Введение в HTMLТема 1. Введение в HTML
Тема 1. Введение в HTMLssuser3896e2
 
Yandex Lego олег оболенский
Yandex Lego   олег оболенскийYandex Lego   олег оболенский
Yandex Lego олег оболенскийMedia Gorod
 

Similar a Emmet - инструмент для веб-разработчика (20)

Zend Framework и мультиязычность
Zend Framework и мультиязычностьZend Framework и мультиязычность
Zend Framework и мультиязычность
 
Client Side Autotesting Flash
Client Side Autotesting FlashClient Side Autotesting Flash
Client Side Autotesting Flash
 
ZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and DoctrineZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and Doctrine
 
ZFConf 2010: Zend Framework and Multilingual
ZFConf 2010: Zend Framework and MultilingualZFConf 2010: Zend Framework and Multilingual
ZFConf 2010: Zend Framework and Multilingual
 
Методики «Inversion of Control» и «Dependency Injection». Применение в Spring.
Методики «Inversion of Control» и «Dependency Injection». Применение в Spring.Методики «Inversion of Control» и «Dependency Injection». Применение в Spring.
Методики «Inversion of Control» и «Dependency Injection». Применение в Spring.
 
Профилирование и оптимизация jQuery–кода
Профилирование и оптимизация jQuery–кодаПрофилирование и оптимизация jQuery–кода
Профилирование и оптимизация jQuery–кода
 
Профилирование и оптимизация jQuery–кода (Владимир Журавлёв)
Профилирование и оптимизация jQuery–кода (Владимир Журавлёв)Профилирование и оптимизация jQuery–кода (Владимир Журавлёв)
Профилирование и оптимизация jQuery–кода (Владимир Журавлёв)
 
бегун
бегунбегун
бегун
 
Selenium 2.0: обзор новых возможностей
Selenium 2.0: обзор новых возможностейSelenium 2.0: обзор новых возможностей
Selenium 2.0: обзор новых возможностей
 
Rich UI on Dojo Toolkit and Zend Framework
Rich UI on Dojo Toolkit and Zend FrameworkRich UI on Dojo Toolkit and Zend Framework
Rich UI on Dojo Toolkit and Zend Framework
 
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИСTARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
 
Баба-Яга против! — Роман Дворнов, Ostrovok.ru
Баба-Яга против! — Роман Дворнов, Ostrovok.ruБаба-Яга против! — Роман Дворнов, Ostrovok.ru
Баба-Яга против! — Роман Дворнов, Ostrovok.ru
 
ASP.NET MVC - как построить по-настоящему гибкое веб-приложение
ASP.NET MVC - как построить по-настоящему гибкое веб-приложениеASP.NET MVC - как построить по-настоящему гибкое веб-приложение
ASP.NET MVC - как построить по-настоящему гибкое веб-приложение
 
Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
Компонентная разработка на Stylus, Jade, Typescript - Леонид ШирмановКомпонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
 
Что нового в Visual Studio 2010 и .Net 4.0
Что нового в Visual Studio 2010 и .Net 4.0Что нового в Visual Studio 2010 и .Net 4.0
Что нового в Visual Studio 2010 и .Net 4.0
 
Take more from Jquery
Take more from JqueryTake more from Jquery
Take more from Jquery
 
бегун
бегунбегун
бегун
 
Профилирования и оптимизация jQuery-кода
Профилирования и оптимизация jQuery-кодаПрофилирования и оптимизация jQuery-кода
Профилирования и оптимизация jQuery-кода
 
Тема 1. Введение в HTML
Тема 1. Введение в HTMLТема 1. Введение в HTML
Тема 1. Введение в HTML
 
Yandex Lego олег оболенский
Yandex Lego   олег оболенскийYandex Lego   олег оболенский
Yandex Lego олег оболенский
 

Más de FDConf

Антон Киршанов - «Квант изменения. Реактивные реакции на React.
Антон Киршанов - «Квант изменения. Реактивные реакции на React.Антон Киршанов - «Квант изменения. Реактивные реакции на React.
Антон Киршанов - «Квант изменения. Реактивные реакции на React.FDConf
 
Игорь Еростенко - Создаем виртуальный тур
Игорь Еростенко - Создаем виртуальный турИгорь Еростенко - Создаем виртуальный тур
Игорь Еростенко - Создаем виртуальный турFDConf
 
Илья Климов - Reason: маргиналы против хайпа
Илья Климов - Reason: маргиналы против хайпаИлья Климов - Reason: маргиналы против хайпа
Илья Климов - Reason: маргиналы против хайпаFDConf
 
Максим Щепелин - Доставляя веб-контент в игру
Максим Щепелин - Доставляя веб-контент в игруМаксим Щепелин - Доставляя веб-контент в игру
Максим Щепелин - Доставляя веб-контент в игруFDConf
 
Александр Черноокий - Как правило "победитель получает все" работает и не раб...
Александр Черноокий - Как правило "победитель получает все" работает и не раб...Александр Черноокий - Как правило "победитель получает все" работает и не раб...
Александр Черноокий - Как правило "победитель получает все" работает и не раб...FDConf
 
Михаил Волчек - Что такое Цифровая мастерская?
Михаил Волчек - Что такое Цифровая мастерская?Михаил Волчек - Что такое Цифровая мастерская?
Михаил Волчек - Что такое Цифровая мастерская?FDConf
 
Radoslav Stankov - Handling GraphQL with React and Apollo
Radoslav Stankov - Handling GraphQL with React and ApolloRadoslav Stankov - Handling GraphQL with React and Apollo
Radoslav Stankov - Handling GraphQL with React and ApolloFDConf
 
Виктор Русакович - Выборы, выборы, все фреймворки… приторны
Виктор Русакович - Выборы, выборы, все фреймворки… приторныВиктор Русакович - Выборы, выборы, все фреймворки… приторны
Виктор Русакович - Выборы, выборы, все фреймворки… приторныFDConf
 
Slobodan Stojanovic - 8 1/2 things about serverless
Slobodan Stojanovic - 8 1/2 things about serverless Slobodan Stojanovic - 8 1/2 things about serverless
Slobodan Stojanovic - 8 1/2 things about serverless FDConf
 
Тимофей Лавренюк - Почему мне зашел PWA?
Тимофей Лавренюк - Почему мне зашел PWA?Тимофей Лавренюк - Почему мне зашел PWA?
Тимофей Лавренюк - Почему мне зашел PWA?FDConf
 
В погоне за производительностью
В погоне за производительностьюВ погоне за производительностью
В погоне за производительностьюFDConf
 
Если у вас нету тестов...
Если у вас нету тестов...Если у вас нету тестов...
Если у вас нету тестов...FDConf
 
Migrate your React.js application from (m)Observable to Redux
Migrate your React.js application from (m)Observable to ReduxMigrate your React.js application from (m)Observable to Redux
Migrate your React.js application from (m)Observable to ReduxFDConf
 
Dart: питание и сила для вашего проекта
Dart: питание и сила для вашего проектаDart: питание и сила для вашего проекта
Dart: питание и сила для вашего проектаFDConf
 
Scalable Angular 2 Application Architecture
Scalable Angular 2 Application ArchitectureScalable Angular 2 Application Architecture
Scalable Angular 2 Application ArchitectureFDConf
 
JavaScript: прошлое, настоящее и будущее.
JavaScript: прошлое, настоящее и будущее.JavaScript: прошлое, настоящее и будущее.
JavaScript: прошлое, настоящее и будущее.FDConf
 
CSSO — сжимаем CSS
CSSO — сжимаем CSSCSSO — сжимаем CSS
CSSO — сжимаем CSSFDConf
 
Redux. From twitter hype to production
Redux. From twitter hype to productionRedux. From twitter hype to production
Redux. From twitter hype to productionFDConf
 
Будь первым
Будь первымБудь первым
Будь первымFDConf
 
"Service Worker: Let Your Web App Feel Like a Native "
"Service Worker: Let Your Web App Feel Like a Native ""Service Worker: Let Your Web App Feel Like a Native "
"Service Worker: Let Your Web App Feel Like a Native "FDConf
 

Más de FDConf (20)

Антон Киршанов - «Квант изменения. Реактивные реакции на React.
Антон Киршанов - «Квант изменения. Реактивные реакции на React.Антон Киршанов - «Квант изменения. Реактивные реакции на React.
Антон Киршанов - «Квант изменения. Реактивные реакции на React.
 
Игорь Еростенко - Создаем виртуальный тур
Игорь Еростенко - Создаем виртуальный турИгорь Еростенко - Создаем виртуальный тур
Игорь Еростенко - Создаем виртуальный тур
 
Илья Климов - Reason: маргиналы против хайпа
Илья Климов - Reason: маргиналы против хайпаИлья Климов - Reason: маргиналы против хайпа
Илья Климов - Reason: маргиналы против хайпа
 
Максим Щепелин - Доставляя веб-контент в игру
Максим Щепелин - Доставляя веб-контент в игруМаксим Щепелин - Доставляя веб-контент в игру
Максим Щепелин - Доставляя веб-контент в игру
 
Александр Черноокий - Как правило "победитель получает все" работает и не раб...
Александр Черноокий - Как правило "победитель получает все" работает и не раб...Александр Черноокий - Как правило "победитель получает все" работает и не раб...
Александр Черноокий - Как правило "победитель получает все" работает и не раб...
 
Михаил Волчек - Что такое Цифровая мастерская?
Михаил Волчек - Что такое Цифровая мастерская?Михаил Волчек - Что такое Цифровая мастерская?
Михаил Волчек - Что такое Цифровая мастерская?
 
Radoslav Stankov - Handling GraphQL with React and Apollo
Radoslav Stankov - Handling GraphQL with React and ApolloRadoslav Stankov - Handling GraphQL with React and Apollo
Radoslav Stankov - Handling GraphQL with React and Apollo
 
Виктор Русакович - Выборы, выборы, все фреймворки… приторны
Виктор Русакович - Выборы, выборы, все фреймворки… приторныВиктор Русакович - Выборы, выборы, все фреймворки… приторны
Виктор Русакович - Выборы, выборы, все фреймворки… приторны
 
Slobodan Stojanovic - 8 1/2 things about serverless
Slobodan Stojanovic - 8 1/2 things about serverless Slobodan Stojanovic - 8 1/2 things about serverless
Slobodan Stojanovic - 8 1/2 things about serverless
 
Тимофей Лавренюк - Почему мне зашел PWA?
Тимофей Лавренюк - Почему мне зашел PWA?Тимофей Лавренюк - Почему мне зашел PWA?
Тимофей Лавренюк - Почему мне зашел PWA?
 
В погоне за производительностью
В погоне за производительностьюВ погоне за производительностью
В погоне за производительностью
 
Если у вас нету тестов...
Если у вас нету тестов...Если у вас нету тестов...
Если у вас нету тестов...
 
Migrate your React.js application from (m)Observable to Redux
Migrate your React.js application from (m)Observable to ReduxMigrate your React.js application from (m)Observable to Redux
Migrate your React.js application from (m)Observable to Redux
 
Dart: питание и сила для вашего проекта
Dart: питание и сила для вашего проектаDart: питание и сила для вашего проекта
Dart: питание и сила для вашего проекта
 
Scalable Angular 2 Application Architecture
Scalable Angular 2 Application ArchitectureScalable Angular 2 Application Architecture
Scalable Angular 2 Application Architecture
 
JavaScript: прошлое, настоящее и будущее.
JavaScript: прошлое, настоящее и будущее.JavaScript: прошлое, настоящее и будущее.
JavaScript: прошлое, настоящее и будущее.
 
CSSO — сжимаем CSS
CSSO — сжимаем CSSCSSO — сжимаем CSS
CSSO — сжимаем CSS
 
Redux. From twitter hype to production
Redux. From twitter hype to productionRedux. From twitter hype to production
Redux. From twitter hype to production
 
Будь первым
Будь первымБудь первым
Будь первым
 
"Service Worker: Let Your Web App Feel Like a Native "
"Service Worker: Let Your Web App Feel Like a Native ""Service Worker: Let Your Web App Feel Like a Native "
"Service Worker: Let Your Web App Feel Like a Native "
 

Emmet - инструмент для веб-разработчика

  • 1. Emmet как платформа для инструментов Сергей Чикуёнок | http://emmet.io
  • 2. Что такое Emmet? • Инструмент для ускорения работы с HTML и CSS • Плагин для множества популярных редакторов кода • Написан на чистом JavaScript, легко встраивается
  • 6. 2000-е: Ъ-кодеры пишут в «Блокноте»
  • 8. Sublime Text WebIDE • быстрый • красивый • классный API • удобный автокомплит • кроссплатформенный • богатый функционал • много хорошо интегрированных инструментов • удобная отладка
  • 9. С точки зрения фронт-энд разработчика: Sublime Text WebIDE • только раскрашивает HTML и CSS • API работает с обычным текстом • Java • медленная • API позволяет работать с AST, но это очень сложно • разработчики акцентируют внимание на других вещах
  • 10. Код по-прежнему долго писать и тяжело редактировать
  • 13. Преимущества: • Короткая нотация, быстрее писать • Читабельность • Синтаксический сахар • Шаблонизация, связь с внешними данными
  • 14. Недостатки: • Сложная отладка кода • Не решают проблему редактирования существующего кода • Не всегда можно использовать на клиенте
  • 15. Чего хочется: • писать меньше кода • работать в любимом редакторе • разрабатывать инструменты на JavaScript • работать с HTML и CSS как с DOM
  • 16. Emmet – платформа для инструментов веб-разработчика
  • 17. Emmet как платформа • модульная архитектура • написан на JavaScript • поддержка большого количества редакторов •поддержка расширений
  • 18. Расширения Emmet • Обычные .js и .json-файлы в специальной папке • Загружаются автоматически • Могут дополнять или переопределять основной функционал • Одинаково работают в разных редакторах
  • 19. Основные модули • разбор и преобразование аббревиатур • поиск пар тэгов в коде • работа с HTML-тэгами и CSS-правилами через DOM- подобный интерфейс
  • 20. Как из аббревиатур получается HTML-код Разбор аббревиатуры в дерево Нормализация дерева Формирование текстового результата Готовый код
  • 21. Как из аббревиатур получается HTML-код Разбор аббревиатуры в дерево Нормализация дерева Формирование текстового результата Готовый код препроцессоры постпроцессоры фильтры
  • 22. emmet.exec(function(require, _) { require('filters').add('my_filter', function process(tree, profile) { _.each(tree.children, function(item) { // пример для HTML item.start = '<' + item.name() + '>'; item.end = '</' + item.name() + '>'; // пример для Jade item.start = item.name() + 'n'; item.padding = 't'; // преобразуем уже существующий результат item.start = item.start.replace(/</g, '&lt;').replace(/>/g, '&gt;'); // рекурсивное преобразование всего дерева process(item, profile); }); }); }); Пример фильтра div>em|my_filter
  • 23. var tag = emmet.require('htmlMatcher').tag( 'hello <em>world</em>', // текст, где искать тэг 12 // позиция, с которой начать поиск ); tag.open = { // открывающий тэг name: 'em', selfClose: false, // является ли тэг самозакрывающимся range: new Range() // {start: 6, end: 10} }; tag.close = {...}; // закрывающий тэг tag.innerRange = new Range(); // {start: 10, end: 15} tag.innerContent = function(){}; // world tag.outerRange = new Range(); // {start: 6, end: 20} tag.outerContent = function(){}; // <em>world</em> tag.range = innerRange || outerRange; tag.content = innerContent || outerContent; Получение HTML-тэга
  • 24. emmet.exec(function(require, _) { require('actions').add('rename_tag', function(editor) { var tag = require('htmlMatcher').tag(editor.getContent(), editor.getCaretPos()); if (tag) { var newName = editor.prompt('Введите новое имя тэга'); if (tag.close) { editor.replaceContent( '</' + newName + '>', tag.close.range.start, tag.close.range.end); } editor.replaceContent( '<' + newName, tag.open.range.start, tag.open.range.start + tag.open.name.length + 1); } }); }); Пример: переименование тэга
  • 25. Интерфейс для редактирования HTML и CSS (EditTree) • Интерфейс для высокоуровнего редактирования HTML- тэгов и CSS-правил • Похож на DOM • Предоставляет доступ ко всем атрибутам/свойствам контейнера, а также их диапазонам •Учитывает форматирование кода
  • 26. var tree = emmet.require('xmlEditTree') .parse('<tag attr1="val1" attr2="val2">'); tree.value('attr1'); // val1 tree.get('attr1').range(); // {start: 5, end: 17} tree.value('attr1', 'Hello world'); tree.remove('attr2'); tree.add('a', 'b', 0); tree.source; // <tag a="b" attr1="Hello world"> Редактирование HTML (xmlEditTree)
  • 27. var tree = emmet.require('cssEditTree').parse('div {color: red}'); // можно использовать метод parseFromPosition(content, pos) // для получения правила из документа tree.value('color', 'black'); tree.value('position', 'relative'); tree.source; // div {color: black;position: relative;} Редактирование CSS (cssEditTree)
  • 28. Только вы сами можете создавать лучшие инструменты