Несколько месяцев назад я написал пост, который, возможно, был немного перегружен: «Будущее Интернета» . Я не отрицаю, что название было немного сенсационным, но, честно говоря, я был взволнован тем, что увидел, и действительно думаю, что мы наблюдаем тектонический сдвиг в веб-разработке. Сегодняшнее сообщение в блоге не так уж и потрясающе, но я думаю, что это чертовски круто.
Примерно неделю назад Mozilla объявила о выпуске Brick . Brick — это набор компонентов, основанный на стандарте W3C для веб-компонентов . По сути, это способ создания собственных HTML-тегов и их вывода на клиент. Любой, кто когда-либо загружал библиотеку пользовательского интерфейса, знает, что в этом есть острая необходимость. Вообразите разработчика, у которого нет хорошего опыта JavaScript. Вместо того, чтобы изучать что-то вроде пользовательского интерфейса jQuery для добавления вкладок в свое приложение, они могут просто включить библиотеку и использовать теги для записи своего HTML. Мы еще не совсем там, но это приближается.
Кирпичная библиотека Mozilla — отличный тому пример. Их библиотека содержит виджеты для:
- Панели инструментов, кнопки и группы приложений
- Выбор календаря и даты
- Палубы и флипбоксы
- Базовый макет контейнера
- Слайдер
- Управление вкладками (очевидно)
- И более
Некоторые из них действуют как полифиллы. Так, например, Firefox еще не поддерживает тип ввода = дата. (* вздох *) Итак, если вы используете их указатель даты в Firefox, вы увидите:
Принимая во внимание, что тот же код в Chrome ничего не делает, поскольку он изначально поддерживается:
Виджеты пользовательского интерфейса хороши, но сейчас меня интересуют колоды. Возьмите следующий код:
<x-deck> <x-card> Card One </x-card> <x-card> Card Two </x-card> <x-card> Card Three </x-card> </x-deck>
Brick создает единый вид карт, так что первый (по умолчанию, и вы можете настроить это) виден. Затем он предоставляет простой JavaScript API для переключения между ними. Я сразу подумал: «Это может быть отличным способом создания одностраничного приложения для PhoneGap» (на самом деле, я сейчас работаю над ним).
Я сделал простую демонстрацию, которая демонстрирует это. Это не красиво, но вините меня, а не Мозиллу.
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <meta name="description" content="" /> <meta name="viewport" content="width=device-width" /> <link rel="stylesheet" href="brick/brick-1.0beta5.css"/> <script src="brick/brick-1.0beta5.js"></script> <style> x-layout > x-appbar > header, x-layout > footer{ padding: 0; background-color: orange; color: white; font-weight: bold; text-align: center; } html, body{ height: 100%; } </style> </head> <body> <x-layout> <x-appbar> <div><a href="" id="homeLink" title="Home">=</a></div> <header>My App</header> </x-appbar> <section> <x-deck id="mainDeck"> <x-card> <ul> <li><a href="1" class="deckLink">Page One</a></li> <li><a href="2" class="deckLink">Page Two</a></li> <li><a href="3" class="deckLink">Page Three</a></li> </ul> </x-card> <x-card> <h1>Page One</h1> </x-card> <x-card> <h1>Page Two</h1> </x-card> <x-card> <h1>Page Three</h1> </x-card> </x-deck> </section> <footer> Copyright 2013 by Raymond Camden </footer> </x-layout> <script> document.addEventListener('DOMComponentsLoaded', function(){ console.log('domCom loaded'); var deck = document.querySelector("#mainDeck"); var homeLink = document.querySelector("#homeLink"); homeLink.addEventListener("click", function(e) { e.preventDefault(); deck.shuffleTo(0); }); var navLinks = document.querySelectorAll(".deckLink"); for(var i=0,len=navLinks.length; i<len; i++) { navLinks[i].addEventListener("click", function(e) { e.preventDefault(); var target = e.currentTarget.href.split("/").pop(); deck.shuffleTo(target); }); } }); </script> </body> </html>
«Приложение» (хорошо, оно не так уж и сложно) оборачивается тегом x-layout. У меня есть панель приложений для верхнего и нижнего колонтитула в нижней части. Внутри это моя основная колода с 4 картами. Первая карта похожа на базовую домашнюю страницу. У меня есть простое меню с тремя ссылками. Как я уже сказал, Brick предоставляет базовый API для загрузки карт в колоду, но мне нужно написать немного JavaScript, чтобы справиться с этим автоматически. Я не уверен, что я сделал это самый простой способ сделать это, но это сработало. Я просто добавил класс к своим ссылкам и создал обработчик событий, который бы собирал эти события кликов. Затем я использую значение href, чтобы определить, какую карту загрузить (индексы карт основаны на 0). Я сделал нечто подобное для домашней ссылки. Если вы посмотрите на пример для панели теговвы можете видеть, что в Mozilla есть более автоматизированный способ сделать это, поэтому то, что я сделал, возможно, еще проще (или будет в будущем).
Вы можете запустить мое демо здесь, если хотите: http://www.raymondcamden.com/demos/2013/aug/23/test4.html
Я определенно призываю вас проверить это. С тех пор как я впервые поиграл с ним, у них было три обновления, так что это активный проект. И, честно говоря, это интересно писать. Я копаю это.
PS Быстрое редактирование после того, как я опубликовал: я не думаю, что их сайт говорит об этом, но вы можете следить за проектом Mozilla Brick в Twitter: https://twitter.com/mozbrick