SlideShare a Scribd company logo
1 of 17
Программирование в Mozilla
По материалам сайта
http://www.xulplanet.com/tutorials/xultu/
XUL и Chrome
Цель: научиться программировать расширения (add-ons, extensions),
работающие в среде Mozilla Firefox.
Программы на JavaScript, работающие внутри страниц, имеют много
ограничений на доступ к системе.
С другой стороны, универсальные программы не имеют прямого доступа
к содержимому страниц и управлению браузером.
Промежуточный подход: Chrome-пространство, имеющее доступ к
содержимому браузера и загруженным страницам, и имеющее богатый
набор функций для работы с различными компонентами системы.
XUL – XML-oriented User interface Language – язык для определения
элементов диалога с пользователем. XUL-диалоги в Chrome-пространстве
имеют XML-структуру, что позволяет управлять ими с помощью
обычных JavaScript-программ. Весь браузер Firefox построен в виде
большого XUL-диалога (Chrome-документа).
Overlay – это средство, с помощью которого можно «расширить»
стандартный браузер Firefox, добавив в него новые элементы управления.
Построение первого extension’а
Чтобы установить свое расширение (extension), необходимо создать
каталоги специальной структуры и некоторые специальные файлы.
1. Создаем каталог firstextension/chrome/content/.
2. Внутри каталога firstextension/ создаем два текстовых файла:
install.rdf и
chrome.manifest.
3. Создаем приложение внутри firstextension/chrome/content/.
4. Упаковываем всю структуру firstextension/ в zip-архив.
5. Присваиваем архиву расширение xpi, запускаем firefox и открываем
в нем наше расширение.
Наш extension будет установлен как дополнение, и информацию о нем
можно будет просмотреть в add-ons менеджере.
sample
Создание XUL-диалогов
Расширение, как правило, определяет элементы интерфейса с
пользователем (новые пункты меню, кнопки, диалоги) и определяет
программы на Javascript, работающие в ответ на действия с элементами.
Элементы интерфейса принято описывать не на HTML, а на специальном
XML-языке, называемом XUL.
В качестве примера определим диалог для поиска файлов
на языке XUL и добавим новый пункт меню для его вызова.
Создаем диалог findfiles.xul в файле со следующим содержанием:
<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<window id="findfile-window"
title="Find Files"
orient="horizontal"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
</window>

Это пока просто пустое окно, которое будет доступно по адресу
chrome://findfiles/content/
findfiles
Добавление элементов интерфейса в окно
Добавим пару кнопок в наше пустое окно. Кнопки описываются практически
так же, как в языке HTML:
<window ...>
<button id="find-button" label="Find"/>
<button id="cancel-button" label="Cancel"/>
</window>

Наш диалог будет выглядеть примерно так:
Надписи можно добавить в наш диалог, используя элементы <label> и
<description>. Фактически эти элементы ничем друг от друга
не отличаются, но принято немного по-разному их использовать.
Еще в XUL (в отличие от HTML) можно задавать простое текстовое поле
ввода с помощью элемента <textbox>.
Добавим поле для ввода имени файла для поиска:
<label value="Search for:" control="find-text"/>
<textbox id="find-text"/>
Задание других элементов интерфейса
<description>
Этот текст будет переноситься по словам, если не помещается
в отведенное для него место.
</description>
<img src="chrome://findfiles/skin/myimage.jpg"/>
или лучше:
<img id="my-image"/>
а в CSS-файле
#my-image {
list-style-image: url("chrome://findfiles/skin/myimage.jpg");
}
<textbox id="t-id" value="default" type="password" maxlength="8"/>
<checkbox id="c-id" checked="true" label="Флажок"/>
<radiogroup>
<radio id="play" selected="true" label="Play"/>
<radio id="work" label="Work"/>
</radiogroup>
Списки.
<listbox rows="4">
<listitem value="0"
<listitem value="1"
<listitem value="2"
<listitem value="3"
<listitem value="4"
<listitem value="5"
<listitem value="6"
</listbox>

label="Sunday"/>
label="Monday"/>
label="Tuesday"/>
label="Wednesday"/>
label="Thursday"/>
label="Friday"/>
label="Saturday"/>

<listbox>
<listhead>
<listheader label="Name"/>
<listheader label="Occupation"/>
</listhead>
<listcols><listcol/><listcol flex="1"/></listcols>
<listitem>
<listcell label="Alex"/>
<listcell label="Engineer"/></listitem>
<listitem>
<listcell label="Peter"/>
<listcell label="Artist"/></listitem>
</listbox>
Выпадающие меню и указатели прогресса.
Для создания выпадающего меню используются три элемента:
menulist, menupopup и menuitem.
<menulist editable="true">
<menupopup>
<menuitem label="www.google.com" selected="true"/>
<menuitem label="www.yandex.ru"/>
<menuitem label="www.rambler.ru"/>
</menupopup>
</menulist>

Счетчики прогресса:
<progressmeter
value="50%"
mode="determined"/>

Расширим наш диалог дополнительными
элементами управления и разместим их,
пользуясь элементами <vbox> и <hbox>.
findfileschromecontent
Гибкие размеры элементов.
Часто бывает необходимо разместить свободное пространство в
определенных местах диалога. Специально предназначенный для
этого элемент называется <spacer>.
Регулировать размеры элементов можно явным указанием ширины и
высоты с помощью атрибутов width= и height= или с помощью языка CSS,
а можно указанием атрибута «гибкости» flex, например:
<hbox flex="1">
<description>
Это некоторый текст, помещенный внутрь диалога.
</description>
<spacer flex="2"/>
<button label="Найти" flex="1"/>
<button label="Отмена"/>
</hbox>
Дополнительные возможности кнопок.
Можно добавлять картинки (иконки) на кнопки.
<button id="find-button" label="Найти" />
#find-button {
list-style-image: url("chrome://findfiles/skin/find.png");
}

Или можно полностью сформировать содержимое кнопки:
<button id="find-button">
<description>Найти</description>
<image src="chrome://findfiles/skin/find.png"/>
<description>файл</description>
</button>

Кнопка может содержать выпадающее меню:
<button id=“find-button" label="Найти" type="menu">
<menupopup>
<menuitem label="Файл"/>
<menuitem label="Картинку"/>
<menuitem label="Друга"/>
</menupopup>
</button>
Box-модель.
Основой всех элементов является элемент <box>. Все прочие элементы
являются лишь частными случаями этого.
<vbox> эквивалентно <box orient="vertical">
<hbox> эквивалентно <box orient="horizontal"> .
Размер элемента обычно определяется внутренним содержанием.
Дополнительно можно указать размеры в атрибутах (только в точках)
или с помощью привязки файла стилей на языке CSS.
width="300" – задание в виде атрибута элемента (в CSS – width:300px;)
height="100" – задание в виде атрибута элемента (в CSS – height:100px;)
minwidth="10" – задание в виде атрибута элемента (в CSS – min-width:10px;)
maxheight="80" – задание в виде атрибута элемента (в CSS – max-height:80px;)
Размещение элементов внутри box’а.
Кроме размера можно управлять размещением элементов внутри box’а,
если он сам гибкий, а его внутренние элементы – нет. Это делается с
помощью атрибутов box’а pack и align.
Возможные значения атрибута pack:
start, center, end
Возможные значения атрибута align:
start, center, end, baseline, stretch
<hbox flex="1" pack="" align="">
<description>
Это текст.
</description>
<button label="Это кнопка"/>
<image src="chrome://findfiles/skin/google.png"/>
</hbox>
Stack и Deck – специальные контейнеры.
Обычно элементы внутри контейнеров располагаются в ряд (по вертикали
или по горизонтали). Можно их наложить друг на друга. Для этого
используются специальные контейнеры – Stack и Deck.
Элементы стека располагаются один
поверх другого, причем все они
растягиваются так, чтобы иметь
размер максимального из них.
<groupbox orient="horizontal" align="center">
<caption label="Стеки"/>
<stack style="background-color: yellow;">
<description style="padding-top: 1px; padding-left: 1px;">
Это текст с тенью</description>
<description style="color: blue;">Это текст с тенью</description>
</stack>
<stack style="background-color: silver;" orient="horizontal">
<progressmeter value="30%" style="margin: 4px;"/>
<label value="30%" style="margin-left: 1em;"/>
</stack>
</groupbox>
Stack и Deck – специальные контейнеры.
Элементы внутри стека можно и не растягивать, если для каждого из них
задать позицию внутри контейнера. Например, текст с тенью и шкалу
прогресса из предыдущего слайда можно оформить и по-другому.
<groupbox orient="horizontal" align="center">
<caption label="Стеки"/>
<stack style="background-color: yellow;">
<description left="1" top="1">Это текст с тенью</description>
<description style="color: blue;">Это текст с тенью</description>
</stack>
<stack style="background-color: silver;" orient="horizontal">
<progressmeter value="30%" style="margin: 4px;" top="0"/>
<label value="30%" left="40"/>
</stack>
</groupbox>
Stack и Deck – специальные контейнеры.
Элементы дека располагаются все
в одном и том же месте, причем
виден всегда только один из них.
<groupbox>
<caption label="Деки"/>
<deck selectedIndex="2" style="background-color: yellow;">
<description value="Это страница № 0"/>
<button label="Это страница № 1"/>
<vbox>
<description value="Это страница № 2"/>
<button label="И это тоже № 2"/>
</vbox>
</deck>
</groupbox>

Значение атрибута selectedIndex можно менять динамически
из программ на JavaScript, чтобы в разное время показывать разное
содержание. Например, менять содержимое панели с ярлыками.
Панели с ярлыками.
Имеется несколько взаимосвязанных элементов, образующих все вместе
такой важный элемент управления, как «панель с ярлыками». Это:
tabbox, tabs, tab, tabpanels, tabpanel
<tabbox width="400">
<tabs>
<tab label="Ярлык 1"/>
<tab label="Ярлык 2"/>
<tab label="Ярлык 3"/>
<tab label="Ярлык 4"/>
</tabs>
<tabpanels height="100">
<tabpanel>...</tabpanel>
<tabpanel>...</tabpanel>
<tabpanel>...</tabpanel>
<tabpanel>...</tabpanel>
</tabpanels>
</tabbox>
Панели с ярлыками.
Введем панели в наш диалог поиска файлов:

Вторая панель диалога выглядит так:
<tabpanel id="optionspanel" orient="vertical">
<checkbox id="casecheck"
label="Поиск чувствителен к регистру букв"/>
<checkbox id="wordscheck"
label="Имя файла только целиком"/>
</tabpanel>

More Related Content

What's hot

Рекомендации по работе в Вики
Рекомендации по работе в ВикиРекомендации по работе в Вики
Рекомендации по работе в ВикиGalina Sklemina
 
Первое знакомство с MODx revolution
Первое знакомство с MODx revolutionПервое знакомство с MODx revolution
Первое знакомство с MODx revolutionGetDev.NET
 
Osvaivaem 250px max_shirshin
Osvaivaem 250px max_shirshinOsvaivaem 250px max_shirshin
Osvaivaem 250px max_shirshinyaevents
 
Презентация на тему "WEB-программирование"
Презентация на тему "WEB-программирование"Презентация на тему "WEB-программирование"
Презентация на тему "WEB-программирование"Gotti Vartanyan
 
основы Html
основы Htmlосновы Html
основы Htmlgalka08m
 
Лекция #2. Принцип организации World Wide Web
Лекция #2. Принцип организации World Wide WebЛекция #2. Принцип организации World Wide Web
Лекция #2. Принцип организации World Wide WebЯковенко Кирилл
 
Лекция #1. Основы Web-технологий
Лекция #1. Основы Web-технологийЛекция #1. Основы Web-технологий
Лекция #1. Основы Web-технологийЯковенко Кирилл
 
сысоев андрей
сысоев андрейсысоев андрей
сысоев андрейVlado Sudin
 
сысоев андрей
сысоев андрейсысоев андрей
сысоев андрейVlado Sudin
 
Сергей Бережной "Про шаблонизаторы вообще и BEMHTML в частности"
Сергей Бережной "Про шаблонизаторы вообще и BEMHTML в частности"Сергей Бережной "Про шаблонизаторы вообще и BEMHTML в частности"
Сергей Бережной "Про шаблонизаторы вообще и BEMHTML в частности"Yandex
 
Верстка_Лекция_3
Верстка_Лекция_3Верстка_Лекция_3
Верстка_Лекция_3itc73
 
Структура html документа
Структура html документаСтруктура html документа
Структура html документаAndrey Radionov
 
Занятие 3 Работа с текстом в презентациях PowerPoint
Занятие 3 Работа с текстом в презентациях PowerPointЗанятие 3 Работа с текстом в презентациях PowerPoint
Занятие 3 Работа с текстом в презентациях PowerPointНиколай Колдовский
 
Верстка_Лекция_1
Верстка_Лекция_1Верстка_Лекция_1
Верстка_Лекция_1itc73
 
Present forms&css
Present forms&cssPresent forms&css
Present forms&cssitc73
 

What's hot (18)

55
5555
55
 
Рекомендации по работе в Вики
Рекомендации по работе в ВикиРекомендации по работе в Вики
Рекомендации по работе в Вики
 
Первое знакомство с MODx revolution
Первое знакомство с MODx revolutionПервое знакомство с MODx revolution
Первое знакомство с MODx revolution
 
Osvaivaem 250px max_shirshin
Osvaivaem 250px max_shirshinOsvaivaem 250px max_shirshin
Osvaivaem 250px max_shirshin
 
Презентация на тему "WEB-программирование"
Презентация на тему "WEB-программирование"Презентация на тему "WEB-программирование"
Презентация на тему "WEB-программирование"
 
основы Html
основы Htmlосновы Html
основы Html
 
Лекция #2. Принцип организации World Wide Web
Лекция #2. Принцип организации World Wide WebЛекция #2. Принцип организации World Wide Web
Лекция #2. Принцип организации World Wide Web
 
Лекция #1. Основы Web-технологий
Лекция #1. Основы Web-технологийЛекция #1. Основы Web-технологий
Лекция #1. Основы Web-технологий
 
сысоев андрей
сысоев андрейсысоев андрей
сысоев андрей
 
сысоев андрей
сысоев андрейсысоев андрей
сысоев андрей
 
Сергей Бережной "Про шаблонизаторы вообще и BEMHTML в частности"
Сергей Бережной "Про шаблонизаторы вообще и BEMHTML в частности"Сергей Бережной "Про шаблонизаторы вообще и BEMHTML в частности"
Сергей Бережной "Про шаблонизаторы вообще и BEMHTML в частности"
 
Верстка_Лекция_3
Верстка_Лекция_3Верстка_Лекция_3
Верстка_Лекция_3
 
Структура html документа
Структура html документаСтруктура html документа
Структура html документа
 
Основы HTML
Основы HTMLОсновы HTML
Основы HTML
 
Занятие 3 Работа с текстом в презентациях PowerPoint
Занятие 3 Работа с текстом в презентациях PowerPointЗанятие 3 Работа с текстом в презентациях PowerPoint
Занятие 3 Работа с текстом в презентациях PowerPoint
 
Верстка_Лекция_1
Верстка_Лекция_1Верстка_Лекция_1
Верстка_Лекция_1
 
HTML 2
HTML 2HTML 2
HTML 2
 
Present forms&css
Present forms&cssPresent forms&css
Present forms&css
 

Similar to Chrome

руководство Alfresco 4
руководство Alfresco 4руководство Alfresco 4
руководство Alfresco 4Andrew Galenkov
 
lesson3_HTML_rus.pdf
lesson3_HTML_rus.pdflesson3_HTML_rus.pdf
lesson3_HTML_rus.pdfmmmitioglo
 
Практикум Web программирование
Практикум Web программированиеПрактикум Web программирование
Практикум Web программированиеRauan Ibraikhan
 
Оранжевый - новый синий: Как портировать Chrome Extension в Firefox Extension
Оранжевый - новый синий: Как портировать Chrome Extension в Firefox ExtensionОранжевый - новый синий: Как портировать Chrome Extension в Firefox Extension
Оранжевый - новый синий: Как портировать Chrome Extension в Firefox Extensionchaykaborya
 
Сидристый Станислав: Паттерны и антипаттерны BDD
Сидристый Станислав: Паттерны и антипаттерны BDDСидристый Станислав: Паттерны и антипаттерны BDD
Сидристый Станислав: Паттерны и антипаттерны BDDStanislav Sidristy
 
методичка по Word 40 стр.
методичка по Word 40 стр.методичка по Word 40 стр.
методичка по Word 40 стр.Serghei Urban
 
системы создания и публикации презентаций
системы создания и публикации презентацийсистемы создания и публикации презентаций
системы создания и публикации презентацийkatrindakatrin
 
Flex 4 Gumbo Framework
Flex 4 Gumbo FrameworkFlex 4 Gumbo Framework
Flex 4 Gumbo FrameworkMr_Dr_Jr
 
Css part2
Css part2Css part2
Css part2ISsoft
 
презентация 4. введение в css
презентация 4. введение в cssпрезентация 4. введение в css
презентация 4. введение в cssRusov1
 
Flex 4 gumbo framework
Flex 4 gumbo frameworkFlex 4 gumbo framework
Flex 4 gumbo frameworkValery
 
Максим Ширшин "Яндекс.Панель: осваиваем 250px"
Максим Ширшин "Яндекс.Панель: осваиваем 250px"Максим Ширшин "Яндекс.Панель: осваиваем 250px"
Максим Ширшин "Яндекс.Панель: осваиваем 250px"Yandex
 
Артем Кувалдин: Основы HTML
Артем Кувалдин: Основы HTMLАртем Кувалдин: Основы HTML
Артем Кувалдин: Основы HTMLYandex
 

Similar to Chrome (20)

руководство Alfresco 4
руководство Alfresco 4руководство Alfresco 4
руководство Alfresco 4
 
Flex 4 Gumbo
Flex 4 GumboFlex 4 Gumbo
Flex 4 Gumbo
 
Panel control
Panel controlPanel control
Panel control
 
лек13 3
лек13 3лек13 3
лек13 3
 
Html лаб 2
Html лаб 2Html лаб 2
Html лаб 2
 
lesson3_HTML_rus.pdf
lesson3_HTML_rus.pdflesson3_HTML_rus.pdf
lesson3_HTML_rus.pdf
 
Практикум Web программирование
Практикум Web программированиеПрактикум Web программирование
Практикум Web программирование
 
Оранжевый - новый синий: Как портировать Chrome Extension в Firefox Extension
Оранжевый - новый синий: Как портировать Chrome Extension в Firefox ExtensionОранжевый - новый синий: Как портировать Chrome Extension в Firefox Extension
Оранжевый - новый синий: Как портировать Chrome Extension в Firefox Extension
 
Agile theming with kalatheme & panopoly
Agile theming with kalatheme & panopolyAgile theming with kalatheme & panopoly
Agile theming with kalatheme & panopoly
 
Сидристый Станислав: Паттерны и антипаттерны BDD
Сидристый Станислав: Паттерны и антипаттерны BDDСидристый Станислав: Паттерны и антипаттерны BDD
Сидристый Станислав: Паттерны и антипаттерны BDD
 
методичка по Word 40 стр.
методичка по Word 40 стр.методичка по Word 40 стр.
методичка по Word 40 стр.
 
Основы Confluence
Основы ConfluenceОсновы Confluence
Основы Confluence
 
системы создания и публикации презентаций
системы создания и публикации презентацийсистемы создания и публикации презентаций
системы создания и публикации презентаций
 
Flex 4 Gumbo Framework
Flex 4 Gumbo FrameworkFlex 4 Gumbo Framework
Flex 4 Gumbo Framework
 
Css part2
Css part2Css part2
Css part2
 
презентация 4. введение в css
презентация 4. введение в cssпрезентация 4. введение в css
презентация 4. введение в css
 
Flex 4 gumbo framework
Flex 4 gumbo frameworkFlex 4 gumbo framework
Flex 4 gumbo framework
 
Максим Ширшин "Яндекс.Панель: осваиваем 250px"
Максим Ширшин "Яндекс.Панель: осваиваем 250px"Максим Ширшин "Яндекс.Панель: осваиваем 250px"
Максим Ширшин "Яндекс.Панель: осваиваем 250px"
 
Артем Кувалдин: Основы HTML
Артем Кувалдин: Основы HTMLАртем Кувалдин: Основы HTML
Артем Кувалдин: Основы HTML
 
Module 4
Module 4Module 4
Module 4
 

Chrome

  • 1. Программирование в Mozilla По материалам сайта http://www.xulplanet.com/tutorials/xultu/
  • 2. XUL и Chrome Цель: научиться программировать расширения (add-ons, extensions), работающие в среде Mozilla Firefox. Программы на JavaScript, работающие внутри страниц, имеют много ограничений на доступ к системе. С другой стороны, универсальные программы не имеют прямого доступа к содержимому страниц и управлению браузером. Промежуточный подход: Chrome-пространство, имеющее доступ к содержимому браузера и загруженным страницам, и имеющее богатый набор функций для работы с различными компонентами системы. XUL – XML-oriented User interface Language – язык для определения элементов диалога с пользователем. XUL-диалоги в Chrome-пространстве имеют XML-структуру, что позволяет управлять ими с помощью обычных JavaScript-программ. Весь браузер Firefox построен в виде большого XUL-диалога (Chrome-документа). Overlay – это средство, с помощью которого можно «расширить» стандартный браузер Firefox, добавив в него новые элементы управления.
  • 3. Построение первого extension’а Чтобы установить свое расширение (extension), необходимо создать каталоги специальной структуры и некоторые специальные файлы. 1. Создаем каталог firstextension/chrome/content/. 2. Внутри каталога firstextension/ создаем два текстовых файла: install.rdf и chrome.manifest. 3. Создаем приложение внутри firstextension/chrome/content/. 4. Упаковываем всю структуру firstextension/ в zip-архив. 5. Присваиваем архиву расширение xpi, запускаем firefox и открываем в нем наше расширение. Наш extension будет установлен как дополнение, и информацию о нем можно будет просмотреть в add-ons менеджере. sample
  • 4. Создание XUL-диалогов Расширение, как правило, определяет элементы интерфейса с пользователем (новые пункты меню, кнопки, диалоги) и определяет программы на Javascript, работающие в ответ на действия с элементами. Элементы интерфейса принято описывать не на HTML, а на специальном XML-языке, называемом XUL. В качестве примера определим диалог для поиска файлов на языке XUL и добавим новый пункт меню для его вызова. Создаем диалог findfiles.xul в файле со следующим содержанием: <?xml version="1.0"?> <?xml-stylesheet href="chrome://global/skin/" type="text/css"?> <window id="findfile-window" title="Find Files" orient="horizontal" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> </window> Это пока просто пустое окно, которое будет доступно по адресу chrome://findfiles/content/ findfiles
  • 5. Добавление элементов интерфейса в окно Добавим пару кнопок в наше пустое окно. Кнопки описываются практически так же, как в языке HTML: <window ...> <button id="find-button" label="Find"/> <button id="cancel-button" label="Cancel"/> </window> Наш диалог будет выглядеть примерно так: Надписи можно добавить в наш диалог, используя элементы <label> и <description>. Фактически эти элементы ничем друг от друга не отличаются, но принято немного по-разному их использовать. Еще в XUL (в отличие от HTML) можно задавать простое текстовое поле ввода с помощью элемента <textbox>. Добавим поле для ввода имени файла для поиска: <label value="Search for:" control="find-text"/> <textbox id="find-text"/>
  • 6. Задание других элементов интерфейса <description> Этот текст будет переноситься по словам, если не помещается в отведенное для него место. </description> <img src="chrome://findfiles/skin/myimage.jpg"/> или лучше: <img id="my-image"/> а в CSS-файле #my-image { list-style-image: url("chrome://findfiles/skin/myimage.jpg"); } <textbox id="t-id" value="default" type="password" maxlength="8"/> <checkbox id="c-id" checked="true" label="Флажок"/> <radiogroup> <radio id="play" selected="true" label="Play"/> <radio id="work" label="Work"/> </radiogroup>
  • 7. Списки. <listbox rows="4"> <listitem value="0" <listitem value="1" <listitem value="2" <listitem value="3" <listitem value="4" <listitem value="5" <listitem value="6" </listbox> label="Sunday"/> label="Monday"/> label="Tuesday"/> label="Wednesday"/> label="Thursday"/> label="Friday"/> label="Saturday"/> <listbox> <listhead> <listheader label="Name"/> <listheader label="Occupation"/> </listhead> <listcols><listcol/><listcol flex="1"/></listcols> <listitem> <listcell label="Alex"/> <listcell label="Engineer"/></listitem> <listitem> <listcell label="Peter"/> <listcell label="Artist"/></listitem> </listbox>
  • 8. Выпадающие меню и указатели прогресса. Для создания выпадающего меню используются три элемента: menulist, menupopup и menuitem. <menulist editable="true"> <menupopup> <menuitem label="www.google.com" selected="true"/> <menuitem label="www.yandex.ru"/> <menuitem label="www.rambler.ru"/> </menupopup> </menulist> Счетчики прогресса: <progressmeter value="50%" mode="determined"/> Расширим наш диалог дополнительными элементами управления и разместим их, пользуясь элементами <vbox> и <hbox>. findfileschromecontent
  • 9. Гибкие размеры элементов. Часто бывает необходимо разместить свободное пространство в определенных местах диалога. Специально предназначенный для этого элемент называется <spacer>. Регулировать размеры элементов можно явным указанием ширины и высоты с помощью атрибутов width= и height= или с помощью языка CSS, а можно указанием атрибута «гибкости» flex, например: <hbox flex="1"> <description> Это некоторый текст, помещенный внутрь диалога. </description> <spacer flex="2"/> <button label="Найти" flex="1"/> <button label="Отмена"/> </hbox>
  • 10. Дополнительные возможности кнопок. Можно добавлять картинки (иконки) на кнопки. <button id="find-button" label="Найти" /> #find-button { list-style-image: url("chrome://findfiles/skin/find.png"); } Или можно полностью сформировать содержимое кнопки: <button id="find-button"> <description>Найти</description> <image src="chrome://findfiles/skin/find.png"/> <description>файл</description> </button> Кнопка может содержать выпадающее меню: <button id=“find-button" label="Найти" type="menu"> <menupopup> <menuitem label="Файл"/> <menuitem label="Картинку"/> <menuitem label="Друга"/> </menupopup> </button>
  • 11. Box-модель. Основой всех элементов является элемент <box>. Все прочие элементы являются лишь частными случаями этого. <vbox> эквивалентно <box orient="vertical"> <hbox> эквивалентно <box orient="horizontal"> . Размер элемента обычно определяется внутренним содержанием. Дополнительно можно указать размеры в атрибутах (только в точках) или с помощью привязки файла стилей на языке CSS. width="300" – задание в виде атрибута элемента (в CSS – width:300px;) height="100" – задание в виде атрибута элемента (в CSS – height:100px;) minwidth="10" – задание в виде атрибута элемента (в CSS – min-width:10px;) maxheight="80" – задание в виде атрибута элемента (в CSS – max-height:80px;)
  • 12. Размещение элементов внутри box’а. Кроме размера можно управлять размещением элементов внутри box’а, если он сам гибкий, а его внутренние элементы – нет. Это делается с помощью атрибутов box’а pack и align. Возможные значения атрибута pack: start, center, end Возможные значения атрибута align: start, center, end, baseline, stretch <hbox flex="1" pack="" align=""> <description> Это текст. </description> <button label="Это кнопка"/> <image src="chrome://findfiles/skin/google.png"/> </hbox>
  • 13. Stack и Deck – специальные контейнеры. Обычно элементы внутри контейнеров располагаются в ряд (по вертикали или по горизонтали). Можно их наложить друг на друга. Для этого используются специальные контейнеры – Stack и Deck. Элементы стека располагаются один поверх другого, причем все они растягиваются так, чтобы иметь размер максимального из них. <groupbox orient="horizontal" align="center"> <caption label="Стеки"/> <stack style="background-color: yellow;"> <description style="padding-top: 1px; padding-left: 1px;"> Это текст с тенью</description> <description style="color: blue;">Это текст с тенью</description> </stack> <stack style="background-color: silver;" orient="horizontal"> <progressmeter value="30%" style="margin: 4px;"/> <label value="30%" style="margin-left: 1em;"/> </stack> </groupbox>
  • 14. Stack и Deck – специальные контейнеры. Элементы внутри стека можно и не растягивать, если для каждого из них задать позицию внутри контейнера. Например, текст с тенью и шкалу прогресса из предыдущего слайда можно оформить и по-другому. <groupbox orient="horizontal" align="center"> <caption label="Стеки"/> <stack style="background-color: yellow;"> <description left="1" top="1">Это текст с тенью</description> <description style="color: blue;">Это текст с тенью</description> </stack> <stack style="background-color: silver;" orient="horizontal"> <progressmeter value="30%" style="margin: 4px;" top="0"/> <label value="30%" left="40"/> </stack> </groupbox>
  • 15. Stack и Deck – специальные контейнеры. Элементы дека располагаются все в одном и том же месте, причем виден всегда только один из них. <groupbox> <caption label="Деки"/> <deck selectedIndex="2" style="background-color: yellow;"> <description value="Это страница № 0"/> <button label="Это страница № 1"/> <vbox> <description value="Это страница № 2"/> <button label="И это тоже № 2"/> </vbox> </deck> </groupbox> Значение атрибута selectedIndex можно менять динамически из программ на JavaScript, чтобы в разное время показывать разное содержание. Например, менять содержимое панели с ярлыками.
  • 16. Панели с ярлыками. Имеется несколько взаимосвязанных элементов, образующих все вместе такой важный элемент управления, как «панель с ярлыками». Это: tabbox, tabs, tab, tabpanels, tabpanel <tabbox width="400"> <tabs> <tab label="Ярлык 1"/> <tab label="Ярлык 2"/> <tab label="Ярлык 3"/> <tab label="Ярлык 4"/> </tabs> <tabpanels height="100"> <tabpanel>...</tabpanel> <tabpanel>...</tabpanel> <tabpanel>...</tabpanel> <tabpanel>...</tabpanel> </tabpanels> </tabbox>
  • 17. Панели с ярлыками. Введем панели в наш диалог поиска файлов: Вторая панель диалога выглядит так: <tabpanel id="optionspanel" orient="vertical"> <checkbox id="casecheck" label="Поиск чувствителен к регистру букв"/> <checkbox id="wordscheck" label="Имя файла только целиком"/> </tabpanel>