В этой лекции объясняется, как добавлять в XUL-приложение неинтерактивный текст, изображения и границы.
Работать с таким типом простого, неинтерактивного содержимого очень легко. Неслучайно эта часть XUL так похожа на HTML, хотя сходство, в общем, ограничивается тем, что описывается в этой лекции и в лекции 7, "Формы и меню". Значительная разница между XUL и HTML состоит в том, что в HTML набор тегов фиксированный, а создавать теги с новыми именами в XUL можно без особых усилий. Но пока мы будем рассматривать только стандартные XUL-теги.
На диаграмме в начале этой лекции показано влияние статического
содержимого на Mozilla. Текстовая информация может находиться
непосредственно внутри XUL-файла, а может браться из внешнего
Информация о шрифтах - другой аспект отображения статического содержимого. Платформа Mozilla - хороший инструмент для разработки приложений для UNIX, но нужно позаботиться о том, чтобы готовое приложение использовало все возможности, предоставляемые корректной организацией шрифтов.
Учитывая, что в этой области XUL и HTML несколько похожи, использование XUL как самостоятельного языка требует некоторого обоснования. С этого мы и начнем.
Зачем вообще кому-то понадобился XUL? Разве HTML недостаточно хорош? Разве им нельзя пользоваться для создания разметки? Наверняка таблицы HTML и стили CSS 2 - все, что нам нужно? Что ж, одного HTML уже недостаточно. На рисунке 3.1 показано сообщение общедоступного коммерческого web-приложения на основе HTML, в данном случае это крупный сайт туристической фирмы, занимающейся электронной коммерцией.
(рис 3.1) Проблемы пользовательского интерфейса, созданного на HTMLЕсли взглянуть на это приложение с точки зрения проектирования пользовательских интерфейсов, то похвастаться здесь нечем. Прежде всего, это, кажется, третий раз, когда пользователю приходится подтверждать транзакцию. Кроме того, здесь очень легко что-нибудь испортить: любое случайное движение пользователя может прервать нормальную работу приложения. Наконец, пользователь не видит никакой обратной реакции. Как же ему догадаться, что операция завершилась? Да и вообще, это сообщение выглядит странно и сбивает с толку. Такое всплывающее окно - всего лишь извинения за неудачный пользовательский интерфейс. HTML мало подходит для создания приложений из-за того, что в каждом окне браузера уже существует набор определенных элементов управления, и пользователь может обратиться к ним в любой момент. К тому же из тегов HTML сложно создать надежную систему навигации.
Зато при работе с XUL нет необходимости ограничивать себя подобным
плохим интерфейсом. XUL дает программисту возможность избавиться от
вездесущих панелей инструментов браузера, из-за которых пользователь
может нарушить работу HTML-приложения. XUL также предоставляет
программисту возможность более тщательного контроля над самим
процессом работы приложения благодаря использованию сложных и
Может показаться, что XUL по сравнению с HTML - второстепенная
технология. Но это будет большим заблуждением. Каждое окно
классического браузера (и всех остальных браузеров на основе Mozilla)
- приложение, написанное на XUL; даже окошки, всплывающие по вызову alert() - такие приложения. Некоторые окна браузера, например, окно
Навигатора, могут содержать большие области, заполняемые содержимым
других типов (например, HTML-страницами), но каждое окно - прежде
всего, XUL-приложение. Эти окна взаимодействуют с помощью общих
Чтобы понять, как работает XUL в готовом приложении, представим
себе сначала типичные случаи использования HTML. На web-страницах,
написанных на HTML, есть формы, которые можно заполнять и отправлять,
ссылки и динамический HTML. Собственно
Рассмотрим случай XUL. XUL-документ описывает все элементы
графического интерфейса. Предполагается, что эти элементы для чего-то
нужны. Технология XPCOM в Mozilla предоставляет компоненты, с которыми
упомянутые выше графические элементы могут работать. Как и в случае
HTML, содержимое документа и сервисы, предоставляемые браузером,
используются вместе. XPCOM-компоненты обычно более эффективны, чем
Хотя и XUL, и HTML могут идентифицироваться строками с указанием
пространства имен, между ними есть одно ключевое различие. Для XUL не
существует
То есть на самом деле нет точного или обязательного для выполнения соглашения о том, какие XUL-теги существуют. Это делает язык несколько аморфным. Так происходит, потому что каждая из технологий привносит свои теги, и в любой момент могут быть добавлены еще теги. Следовательно, "корректного" XUL-документа просто не существует. Тогда встает другой вопрос: все ли теги в этом документе делают что-то полезное?
Но на самом деле не стоит впадать в такие крайности; существует четко определенный набор основных тегов XUL. Это неплохо для начала, но в целом XUL не так ограничен, как HTML. Изучение XUL-тегов похоже на составление словаря: тег попадает в словарь, если он часто употребляется, независимо от своего происхождения.
В этой лекции рассматривается только статическое отображение информации, то есть статические текст, изображения и эффекты стилей. Работа с кнопками описывается в лекции 4, "Первые элементы управления и темы".
Тег <description> - самый простой способ отобразить на экране
текст. Существуют и другие способы. Полный список полезных тегов для
отображения текста таков:
<description> <text> <label> <stringbundle> <stringbundleset> <caption>
Так как XUL - это XML, всегда имеется возможность использовать обычную функциональность XML. Для текста это сущности и ссылки на них. Некоторые из таких вариантов позволяют строкам храниться в отдельных файлах, так что подобные механизмы также рассматриваются.
Обратите внимание, что XUL-тег <description> и <Description> совершенно различны по значению и никак друг с другом не
связаны.
Тег <description> - рабочая лошадка для отображения обычного текста
без всякой разметки и т.д. Тег <label> не отличается от <description>
ничем, кроме того, что он поддерживает атрибут control. Этот атрибут
связывает текст метки (label - метка) с элементом формы. Чтобы понять,
как это работает, следует прочитать лекцию 6, "События". <label>, в
общем, - более изящный вариант <description>. Тег <text> использует
более простой механизм отображения текста, чем предыдущие два
тега.
<description> и <label> - единственные теги в XUL, в которых
содержимое может переноситься по строкам, если оно слишком объемное.
При переносе для отображения текста используется несколько строк.
Перенос осуществляется на разрывном nbsp;, ссылку на сущность
неразрывного пробела, в случае необходимости нужно пользоваться его
эквивалентом, #160;. Если текст нельзя перенести до достижения
максимальной длины строки (не встретилось ни одного разрывного
символа), пространство, отведенное под тег строки, будет переполнено.
Строка будет обрезана на границе следующего блока с фиксированной
шириной (обычно это край окна). То же может произойти и при изменении
размеров окна.
<description> и <label> могут включать содержимое любого типа, а не
только текст; это могут быть и <box>, и другие XUL-теги. Содержимое
этих тегов также будет переноситься по строкам. Перенос производится и
в том случае, если закрывающий и открывающий теги встречаются внутри
содержимого <description> или <label>. Короче говоря, эти два тега
ведут себя как HTML-тег <P>. <description> также поддерживает один
особый атрибут:
value
<label> поддерживает два особых атрибута:
value crop
У них обоих содержимое может заключаться или между открывающим и
value.
Значениями атрибута start, center или end. По
умолчанию не используется ни одно из них. Если же задано одно из этих
трех значений, перенос строк содержимого <label> больше не будет
осуществляться. При превышении ширины внешнего блока оно будет
обрезаться. При этом будет также освобождаться место для многоточий
( "..." ). Если , многоточие появится в начале содержимого
метки. Если , многоточие появится в конце, а если , оно может появиться и там, и там. Многоточия сообщают
пользователю о том, что дальше есть еще текст, который можно
прочитать.
На эти теги накладываются некоторые ограничения. Во-первых, XUL-
документы состоят из символов 8-битной кодировки, обычно это value, нужно иметь в виду, что не все стили
CSS 2 для текста могут быть применены к этому содержимому. Значением
данного атрибута также не может быть XML- или XUL-разметка, это может
быть только обычный текст. Для наиболее эффективной работы следует
заключать нужное содержимое между открывающим и закрывающим
тегами.
Тег <text> очень похож на два описанных выше тега, но его
содержимое никогда по строкам не переносится. При переполнении оно
может быть обрезано с использованием атрибута . В этом случае он
будет вести себя как тег <label . Поэтому данный тег более
всего важен в меню и панелях инструментов, где временное сжатие окна
может спрятать часть короткой текстовой строки.
<description>, <text> и <label> - настоящие XUL-теги в том смысле,
что они реализованы в C/C++. Они не происходят из дизайнерской
практики, как, например, пользовательский тег <.
В XUL-приложениях Mozilla декларации типов документов используются для замены зависимого от языка текста на более общие сущности.
Синтаксис для
Как пример можно рассмотреть часть nbsp;, так что автору приходится запоминать более непонятную
комбинацию #160;.
Мнемонические сущности могут заменять целые строки (ссылки на
сущности) и отдельные символы (ссылки на символы). Чтобы вспомнить, о
чем идет речь, следует просмотреть еще раз раздел 4.2.2, "Внешние
сущности" ("
<!DOCTYPE html [ ... ]>
позволяет объявлять дополнительные сущности (или любое другое
разрешенное содержимое #include в C/C++ или require в Perl:
<!DOCTYPE html [ <!ENTITY % textDTD SYSTEM "text.dtd"> %textDTD; ] >
Файл text.
<!ENTITY text.welcome "Приветствую вас в своем приложении!">
Использовать такую сущность и в XUL, и в XML можно так:
<description>text.welcome;</description>
или так:
<description value="text.welcome;"/>
Следовательно, с помощью сущностей приложение может быть полностью
переведено на эсперанто, клингонский (Язык героев
Так как эти сущности появляются как значения XML-атрибутов, в них можно хранить и информацию о стилях. Эта возможность используется реже, когда какая-то локализованная версия должна выглядеть не так, как все остальные. Возможно, меню на кантонском диалекте китайского должно быть красным, а приглашение на свадьбу на Западе - белым.
Самое важное в
Mozilla хранит их в файлах .properties, похожих на файлы
.properties в Java. Ближайший их аналог в технологиях Microsoft
Windows - это файлы .ini. Ближайший аналог в UNIX, возможно, strfile(1).
Как уже было сказано, расширение таких файлов со строками - .properties, а их содержимое - строки, удобные для восприятия человеком. Вот пример такой строки:
instruct-last=Для продолжения нажмите "Далее".
Здесь - имя строки, а 'Для продолжения нажмите
"Далее".' - ее значение. Несколько таких строк в одном файле образуют
набор строк - маленькую базу данных, - с которым может работать
приложение Mozilla.
Файлы .properties должны храниться в подкаталоге файлов локализации
расширения
chrome://packagename/local/filename.properties
С точки зрения чистого XUL наборы строк скучны. В листинге 2.3 показано все, что можно с ними делать.
<stringbundleset> <stringbundle id="menus" src="menus.properties"/> <stringbundle id="tips" src="tips.properties"/> <stringbundle id="status" src="status.properties"/> </stringbundleset>
Ни в одном из этих тегов нет видимого содержимого. Вся их работа -
сделать указанные наборы строк доступными для JavaScript-скриптов. Тег <stringbundleset> - даже не настоящий тег, а пользовательский
контейнер, который может содержать теги <stringbundle>. Для обоих
тегов используются стили, чтобы сделать их невидимыми.
Такой set, общеупотребительно. И хотя теги вроде <stringbundleset> ничего не делают, их использование для
группирования однотипных инструкций (тегов <stringbundle> ) - хорошая
привычка в написании кода. Созданный таким образом код выглядит
аккуратно, и его очень легко читать. Рекомендуется всегда объединять
похожим образом наборы невидимых тегов и помещать их в начало XUL-документа.
Когда дело касается наборов строк, в игру вступает JavaScript. Более подробно об этом рассказано в лекции 5, "Скрипты". Кроме того, можно получить прямой доступ к набору строк прямо из кода, не используя содержимое XUL вообще.
Стоит упомянуть, что, помимо всех перечисленных выше способов
получения и отображения текста, скрипты JavaScript и
В HTML имеется тег <IMG>, в XUL имеется тег <image>. Они одинаковы.
Вот фрагмент кода с использованием последнего:
<image src="myimage.jpg"/>
У изображений есть минимальная ширина и высота, совпадающие с
размерами отображаемых изображений. Если к тегу <image> добавить
атрибут , эти минимальные размеры теряются, и изображение может
сжиматься очень сильно. Чтобы сохранить значения минимальных размеров,
нужно добавить правила стиля для высоты и ширины или соответствующие
им атрибуты.
Существует две очень полезные методики работы с изображениями. Обе
они относятся к информации об украшениях окон, хранящейся в файлах
оформления Mozilla. Хотя в XUL и есть тег <image>, изображения,
использующиеся в темах, не должны объявляться таким образом; их
следует указывать в таблице стилей. Стиль с URL изображения может быть
применен к пустому тегу так:
<description class="placeholder"/>
Пример соответствующего стиля:
.placeholder { list-style-image: url("face.gif"); }
Далее. Большое число изображений можно объединить в один файл. Для отображения одного изображения из такого файла можно использовать функции обрезания тегов в CSS:
#foo {-moz-image-region: rect(48px 16px 64px 0px); }
и, похожим образом:
#foo:hover {-moz-image-region: rect(48px 32px 64px 16px); }
С помощью этой методики можно создавать эффект анимации при
наведении курсора мыши на изображение и другие CSS-эффекты. В таких
случаях, когда одно изображение заменяется другим, раньше нужно было
писать
(рис 3.2) Окно Компоновщика с обрезанными изображениями на панели инструментов и оригинальное изображение.С недавних пор в Mozilla поддерживается и формат изображений .
В Mozilla поддерживается широкий диапазон оформлений границ
объектов на базе CSS 2, плюс несколько расширений. Они описываются в
разделе "Альтернатива: таблицы стилей" текущей лекции. Один полностью
стандартный стиль CSS 2, заслуживающий особого внимания, - .
Обычно он используется для того, чтобы создать область на экране, в
которой можно прокручивать статический текст, например, текст лицензии
на ПО. Для этого необходимы два пользовательских тега, один в другом,
а сам текст нужно поместить во внутренний тег. В HTML в качестве
внешнего тега обычно используется <, а в XUL - <box>.
Обратите внимание, что сами эти полосы прокрутки недоступны из скриптов, что не совсем удобно. Такой способ работы со стилями рекомендуется использовать только в том случае, когда состояние полос прокрутки не играет особой роли. По умолчанию в XUL полосы прокрутки CSS 2 видимы всегда.
В XUL есть и лучшие методы работы с полосами прокрутки, в том числе
довольно общий тег <scrollbox>. Более подробно полосы прокрутки
рассматриваются в лекции 8, "Навигация".
Отображение текста - не очень легкий процесс. Чтобы отобразить текст в графическом интерфейсе (на графическом терминале), каждый символ в тексте должен быть преобразован в набор пикселов. Mozilla очень чувствительна к тому, как это делается, и в результате HTML- приложения могут выглядеть и хорошо, и плохо. Большая часть проблем относится к UNIX-платформам. На рисунке 3.3 показана буква A, нарисованная на экране Mozilla в четырех различных случаях.
(рис 3.3) Четыре глифа Mozilla для буквы A в Windows и UNIX.Каждый из этих символов (
{ font-family : Times; font-size : 72pt; }
Правда, значение font-size слегка менялось так, чтобы символы в разных системах были одного и того же размера. Нечеткий рисунок под каждой буквой - нижняя часть левого штриха соответствующей буквы, увеличенная в пять раз. Очевидно, что для наилучшего представления символов нужно найти и изменить правильные настройки.
На рисунке символы (1) и (2) взяты из Microsoft Windows, а символы
(3) и (4) - из UNIX, где использовалась система X-Windows, основная
технология отображения графики для UNIX/Linux. Сразу бросается в
глаза, что в разных операционных системах у букв разные формы. Это
произошло потому, что использовались, по крайней мере, три варианта
шрифта Times: в Windows -
Два варианта буквы A в Windows отличаются друг от друга только
процессом прорисовки. На панели управления (. В первом
случае он был снят, а во втором установлен. Этот флажок отвечает за
включение сглаживания шрифтов. В терминах Microsoft это также
называется субпиксельной точностью.
Что такое сглаживание? В первую очередь, это процесс выборки
. В этой системе
В вариантах отображения A в системе UNIX для обоих --enable-xft. По умолчанию Mozilla для UNIX собирается без
этого параметра. Стандартная сборка Mozilla 1.0 отображает букву A не
лучше, чем стандартная сборка Mozilla 1.2.1. Почему же очевидно лучший
вариант не станет стандартным?
Эта дополнительная поддержка X отключена по умолчанию из
соображений производительности. Эти соображения довольно сложны и
связаны с архитектурой X-Window. Система X-Window работает следующим
образом: программы отправляют инструкции определенному X-серверу
(например,
Производительность же упоминается потому, что версия Mozilla,
скомпилированная с параметром --enable-xft, в любом случае будет
использовать
Правда, эта замена символов изображениями не всегда критична. В
системе X-Window есть и свои проблемы с производительностью, по
сравнению с которыми беды Mozilla просто ничтожны. Понимание того, как
работает X11, поможет решить, стоит ли включать в Mozilla поддержку
В современных X-приложениях вроде Mozilla, GIMP и OpenOffice
содержится большое число пиктограмм, кнопок и других элементов-
подсказок графического интерфейса. Система X11 изначально
проектировалась для черно-белых мониторов (один бит на один пиксел),
но сейчас мониторы позволяют использовать 8, 24 и даже 32 бита на
пиксел. Следовательно, изображения применяются все чаще и становятся
все больше. Объем информации, передаваемой между X-сервером и его
клиентами, все больше зависит от этих изображений, примерно так же,
как довольно значительную часть передаваемой из Internet информации
также составляют изображения. Если Mozilla работает в таком окружении,
то, передавая дополнительные изображения, вы вряд ли заметите большую
разницу. В этом случае можно включить поддержку
Если же сама система X11 использует немного изображений или
работает на не очень быстром соединении, тогда поддержка
Для интеграции с менеджерами рабочего стола Mozilla 1.0–1.4
основывается на библиотеке графических элементов управления GTK 1.x,
которая работает поверх X-Windows. Существующие улучшения X будут
работать в GNOME 2.0 или KDE и их более поздних версиях, так как
старые версии этой библиотеки есть и в них. Следовательно, сборка
Mozilla с расширением
Тем, кто заинтересовался шрифтами в UNIX, еще придется изучить
очень многое. Можно начать поиск с нескольких разных мест. Руководство
по файлам шрифтов - стандартный сборник вопросов и ответов,
поставляющийся вместе с большинством Linux-систем; твипы (
Наконец, существует еще одна проблема: отображение шрифтов в стандартной сборке Mozilla чрезмерно грубое, как видно из рисунка 3.3. Простое решение - загрузить дополнительные шрифты. В руководствах по работе со шрифтами в Linux очень много ссылок на шрифты. Mozilla может выглядеть красиво даже с обычными растровыми шрифтами (самыми примитивными). Для этого на компьютере должны быть установлены растровые шрифты всех размеров, которые используются в ваших web-документах. Создать такие шрифты без соответствующего опыта довольно сложно. Mozilla не поддерживает встраиваемые шрифты (они загружаются из Internet вместе с документом).
Можно не компилировать Mozilla самостоятельно, а загрузить сборку с
параметром --enable-xft в виде
Основные расширения для оформления в Mozilla относятся к модели представления документа в виде блоков из CSS 2. Эта модель описывает, как блоку с содержимым можно присвоить прямоугольную границу. К этой границе уже можно применить простые стили линий. Mozilla поддерживает границы ,принятые в CSS 2, однако некоторые стили для них не работают.
Расширения Mozilla позволяют создавать даже еще более интересные
границы. У границ могут быть не только прямые углы, и они бывают
разных цветов. Границы вдоль
| Свойство или селектор | Значения | Описание |
|---|---|---|
-moz-border- |
Как и для внешних полей, можно использовать только значения в пикселах | Определяет скругленность углов границы или контура |
-moz-border- |
В пикселах | Скругленность или спрямленность одного заданного угла границы. Одноцветные границы искривляются, у многоцветных линии образуют скошенный угол |
-moz- |
Список цветов, ключевое слово "transparent", особые значения цвета CSS 2 | Цвета для одной заданной стороны границы. Можно указывать любое число цветов, каждому из них будет выделена полоска шириной в пиксел. Последний цвет заполняет оставшееся свободное место, если оно есть |
Эти расширения требуется пояснить. В Mozilla есть два независимых расширения стилей границ, вместе они не работают. В листинге 3.3 приведены этих расширений.
#box1 {
border:solid thick;
border-width:20px; margin:20px; padding:20px;
border-color:gray;
-moz-border-radius-topright: 20px;
-moz-border-radius-bottomright: 40px;
}
#box2 {
border:solid thick;
border-width:20px; margin:20px; padding:20px;
border-top-color : gray;
-moz-border-right-colors :
#000000 #101010 #202020 #303030
#404040 #505050 #606060 #707070
#808080 #909090 #A0A0A0 #B0B0B0
#C0C0C0 #D0D0D0 transparent #000000;
-moz-border-bottom-colors :
#000000 #101010 #202020 #303030
#404040 #505050 #606060 #707070
#808080 #909090 #A0A0A0 #B0B0B0
#C0C0C0 #D0D0D0 transparent #000000;
}
С помощью первого расширения мы получим скругление углов, но
граница должна быть сплошного цвета. При этом поддерживаются некоторые
стили границ из CSS 2 (например, double ), но не все. Второе расширение
позволяет раскрашивать границы в разные цвета. В этом случае граница
рисуется как несколько концентрических линий шириной в один пиксел.
Каждая линия рисуется своим цветом, цвета берутся из заданного списка.
Рисование начинается с
Используя эти расширения, можно получить "зубчатые", неодинаковые углы границ, но это следствие плохого кода на XUL, а не фундаментальная ошибка в Mozilla.
Некоторые из этих стилей также применимы к контурам из CSS 2. Поддержка контуров в Mozilla описывается в лекции 7, "Формы и меню".
Mozilla также содержит расширения стилей для изображений. Свойство , упоминавшееся ранее, - не расширение, а стандартное
свойство CSS 2. Список расширений приведен в таблице 3.2.
(рис 3.4) Пример собственных стилей Mozilla.| Свойство | Значения | Описание |
|---|---|---|
-moz-background- |
border, |
Поддержка ограничения фона согласно еще не законченному CSS 3. Mozilla 1.2+ |
-moz-background-origin |
order, |
Поддержка начальной точки фона согласно еще не законченному CSS 3. Mozilla 1.2+ |
-moz-force- |
1=true, 0=false |
Показывать пиктограмму "не удалось загрузить изображение" вместо самого изображения |
-moz-image-region |
Как и для |
Показывать только часть изображения |
Помимо упомянутых выше расширений существуют и такие, которые могут применяться практически ко всем тегам, а не только к определяющим конкретное содержимое или особую разметку. Они перечислены в таблице 3.3.
| Свойство | Значение | Описание |
|---|---|---|
| Любое свойство | -moz-initial |
Установить в качестве значения этого свойство то, которое использовалось бы по умолчанию, если бы не было наследования |
| Большинство свойств | inherit |
То же, что и в HTML/XHTML |
| Любое свойство шрифта | См. раздел "Альтернатива: таблицы стилей" лекции 10, "Окна и панели". | |
| Любое свойство цвета | Системные цвета | См. раздел "Альтернатива: таблицы стилей" лекции 10, "Окна и панели". |
-moz- |
none или url() |
Использовать для тега указанную связь XBL. См. лекцию про XBL |
-moz- |
От 0.0 до 1.0 | Сделать содержимое полупрозрачным - то же, что и |
Обратите внимание, что XUL не поддерживает стиль CSS 2 . С его помощью можно зачеркивать или подчеркивать
текст.
На момент написания этого курса стандарт CSS 3 еще находился в
стадии разработки, и в Mozilla реализована только частичная его
поддержка. В CSS 3 будет включена модель
В разделе "Практика" мы заполним текстом ту структуру диалога, которую создали в прошлый раз. Мы также выясним, как применять различные локализации, хотя они и не используются в NoteTaker.
Разметка - это тоже содержимое, но оно невидимо для пользователя. Настоящее содержимое, информация для пользователя, видимо. Стандартный текст, штамп - текст на панели окна, который никогда не меняется. Слово "штамп" пришло из истории печати и также будет использоваться нами в проектировании форм. Нашей стратегией будет включить достаточно текста для внятного снимка окна. Нам придется сделать что-то очень быстро - то, что мы потом бросим на растерзание пользователям, аналитикам и специалистам по пользовательским интерфейсам. Им наверняка почти все не понравится, и многое придется выкинуть. Предоставляя ранний черновик интерфейса, мы теряем только часы, а не недели работы. В идеале все это должно случиться до стадии написания спецификации проекта - к тому времени все части окна уже должны быть определены и закреплены на своих местах.
Так как мы еще не знаем ни одного элемента управления, содержательная часть этого диалога будет довольно-таки простой. Всюду, где должен быть элемент управления, у нас будет вместо заглушки пустой блок с видимой границей. В листинге 3.4 показан фрагмент содержимого, добавляемого к разметке.
<text value="Edit"/> <text value="Keywords"/> <description>Summary</description> <box/> <description>Details</description> <box flex="1"/> <caption label="Options"/> <description>Chop Query</description> <description>Home Page</description> <caption label="Size"/> <description>Width</description> <description>Height</description> <description>Top</description> <description>Left</description> <box/> <box/> <box/> <box/> <description>px</description> <description>px</description> <description>px</description> <description>px</description> <text value="Cancel"/> <spacer flex="1"/> <text value="Save"/>
Как видите, все это достаточно тривиально. Обратите внимание, что
для текста, заменяющего команды используется тег <text>, а для текста,
заменяющего инструкции, используется <description>. Внимательно
прочитав текст для вставки в черновик, мы нашли и исправили ошибку: Bottom нужно заменить на Left, так как содержательные элементы
позиционируются с помощью атрибутов стиля top и left.
Результат добавления текста показан на рисунке 3.5.
(рис 3.5) Первый черновик диалога NoteTakerОстается только подправить стили так, чтобы исчезли ненужные
Еще мы могли бы сделать NoteTaker доступным для локализации, чтобы
его интерфейс можно было перевести на разные языки. Для этого мы будем
использовать
В своем проекте вам, возможно, захочется добавить поддержку локализации. Делается это так. Прежде всего, весь статический текст из XUL-файла должен быть заменен ссылками на сущности, как в обычном XML. Это значит, что тег вроде
<text value="Cancel"/>
будет заменен мнемонической ссылкой на сущность вроде такой:
<text value="editDialog.cancel"/>
В этой лекции мы определили весь статический текст, поэтому
изменения очевидны. Сущность editDialog.cancel должна быть объявлена и
определена в
<!ENTITY editDialog.cancel "Cancel">
Так что все просто. Только нужно помнить, что текст в
chrome/notetaker/locale/en-US/edit.dtd
Если это русский файл, следует просто заменить en-US на ru-RU. Имя
файла, edit.
<!DOCTYPE window>
на
<!DOCTYPE window [ <!ENTITY % editDTD SYSTEM "chrome://notetaker/locale/edit.dtd"> %editDTD; ]>
Обратите внимание, что в этом URL
chrome://notetaker/locale/en-US/edit.dtd
Именно туда мы будем складывать все файлы с текстом интерфейса и вообще зависимые от языка файлы. Но на самом деле это еще не полностью измененный URL, он только показывает, как подставляется код текущего языка интерфейса. Полностью измененный URL будет таким:
resource://chrome/notetaker/locale/en-US/edit.dtd
Наконец, мы хотим, чтобы платформа "знала" о том, что эти зависимые
от языка файлы доступны и что их можно использовать в NoteTaker. Иначе
Mozilla просто не будет обращать на них внимания. Чтобы объявить
наличие поддержки какого-то языка, в каталог этого языка нужно
добавить файл contents.
<?xml version="1.0"?>
<RDF
xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:chrome="http://www.mozilla.org/rdf/chrome#">
<Seq about="urn:mozilla:locale:root">
<li resource="urn:mozilla:locale:en-US"/>
</Seq>
<Description about="urn:mozilla:locale:en-US">
<chrome:packages>
<Seq about="urn:mozilla:locale:en-US:packages">
<li resource="urn:mozilla:locale:en-US:notetaker"/>
</Seq>
</chrome:packages>
</Description>
</RDF>
Этот файл можно использовать для любого языка, просто заменив en-US
на код нужного языка, а notetaker - на имя соответствующего
приложения. Пока примите его как данность и не вникайте в его
структуру. Подробнее <Description> можно опустить, если файлы языка
уже объявлены где-то в
После создания этого файла обновим файл installed-
locale,install,url,resource:/chrome/notetaker/locale/en-US/
Так платформа узнает, что поддержка данного языка существует, а
пересохранение файла предписывает платформе просмотреть содержимое
В этой системе поддержки языков также возможно отслеживание версий.
Информация о версии локализации может находиться в файлах contents.
Инспектор
Чтобы запустить Инспектор, нужно выбрать Инструменты | web-разработка |
Инспектор в окне Навигатора. В открывшемся окне
программы следует выбрать Файл | Исследовать окно, а затем - любое
окно из списка, кроме того, что называется "Инспектор Правка | Настройки... и убедиться, что
флажок "Подсвечивать выбранный элемент" установлен, а значение
"Длительность подсветки" - не меньше 2500 миллисекунд (для
новичков).
Пользоваться большей частью команд из меню Инспектора очень просто.
Самые важные кнопки, на которые приходится будете часто нажимать, -
две маленькие пиктограммы, каждая из которых находится в верхней части
одной из больших панелей Инспектора. Рисунок на них напоминает
пиктограммы окон в Windows Explorer в режиме отображения маленьких
значков. Щелкнув по этим пиктограммам, можно открыть выпадающие меню.
Из левого меню нужно выбрать Узлы
(рис 3.6) Разбор окна Навигатора, отображающего HTML, в Инспекторе DOMНа панели слева показана полная иерархия элементов XML,
составляющих окно Mozilla, в виде дерева. Так как все окна Mozilla
написаны на XUL, это иерархия XUL-тегов. В некоторых окнах, например
окнах Навигатора, есть и HTML-теги. Можно проходить по дереву вглубь,
просто выбирая нужные ветки, или щелчком выделить один нужный тег.
Выделив тег, мы видим, что соответствующий ему графический объект в
его окне подсвечивается красным. Если тег невидим, тогда мигает только
линия, вертикальная или горизонтальная. Панель слева обычно делится на
три колонки: nodeName, id и class. Можно добавлять и другие колонки,
щелкнув по кнопке выбора колонок справа вверху.
На панели справа отображается один из специализированных наборов данных о выделенных тегах из левой панели. Здесь также можно выбирать колонки для отображения. Например, выбрав панель Вычисляемые стили, мы увидим стили выбранного тега после применения всех правил CSS 2 и наследования. Это действительные стили тега - то, как он выглядит на экране.
Кружки на снимке окна показывают те элементы управления Инспектором
, не нажимайте на нее, иначе рискуете "подвесить"
платформу прежде, чем закончите работу.
Самая простая цель использования Инспектора
Другое очевидное применение Инспектора – обучение. Вы сможете
подробно разобрать все XUL-приложения, составляющие классический
браузер, да и вообще любой продукт на основе Mozilla. Так можно многое
узнать о том, как программисты Mozilla создавали стандартное
наполнение
Самое простое, что можно сделать с помощью XUL - отображать
статические текст и изображения. Добавлять такие данные очень легко.
Тег <description> предоставляет полезную возможность переноса строк
текста, но обычно он используется для отображения небольших частей
текста. Использование изображений и стилей в XUL очень похоже на их
применение в HTML. И в XUL, и в HTML можно использовать расширения
Mozilla по отображению границ, кроме того, в Mozilla есть и другие
расширения стилей, причем некоторые из них предназначены только для
содержательных тегов, а некоторые - для тегов, определяющих визуальную
структуру документа.
XUL без графических элементов управления вряд ли более полезен, чем HTML. В следующей лекции речь пойдет о том, как добавлять наиболее часто используемый элемент управления, кнопку. Также в четвертой лекции, "Первые элементы управления и темы", мы попробуем улучшить внешний вид нашего приложения.
В этой лекции объясняется, как добавлять в XUL-приложение неинтерактивный текст, изображения и границы.
Работать с таким типом простого, неинтерактивного содержимого очень легко. Неслучайно эта часть XUL так похожа на HTML, хотя сходство, в общем, ограничивается тем, что описывается в этой лекции и в лекции 7, "Формы и меню". Значительная разница между XUL и HTML состоит в том, что в HTML набор тегов фиксированный, а создавать теги с новыми именами в XUL можно без особых усилий. Но пока мы будем рассматривать только стандартные XUL-теги.
На диаграмме в начале этой лекции показано влияние статического
содержимого на Mozilla. Текстовая информация может находиться
непосредственно внутри XUL-файла, а может браться из внешнего
Информация о шрифтах - другой аспект отображения статического содержимого. Платформа Mozilla - хороший инструмент для разработки приложений для UNIX, но нужно позаботиться о том, чтобы готовое приложение использовало все возможности, предоставляемые корректной организацией шрифтов.
Учитывая, что в этой области XUL и HTML несколько похожи, использование XUL как самостоятельного языка требует некоторого обоснования. С этого мы и начнем.
Зачем вообще кому-то понадобился XUL? Разве HTML недостаточно хорош? Разве им нельзя пользоваться для создания разметки? Наверняка таблицы HTML и стили CSS 2 - все, что нам нужно? Что ж, одного HTML уже недостаточно. На рисунке 3.1 показано сообщение общедоступного коммерческого web-приложения на основе HTML, в данном случае это крупный сайт туристической фирмы, занимающейся электронной коммерцией.
(рис 3.1) Проблемы пользовательского интерфейса, созданного на HTMLЕсли взглянуть на это приложение с точки зрения проектирования пользовательских интерфейсов, то похвастаться здесь нечем. Прежде всего, это, кажется, третий раз, когда пользователю приходится подтверждать транзакцию. Кроме того, здесь очень легко что-нибудь испортить: любое случайное движение пользователя может прервать нормальную работу приложения. Наконец, пользователь не видит никакой обратной реакции. Как же ему догадаться, что операция завершилась? Да и вообще, это сообщение выглядит странно и сбивает с толку. Такое всплывающее окно - всего лишь извинения за неудачный пользовательский интерфейс. HTML мало подходит для создания приложений из-за того, что в каждом окне браузера уже существует набор определенных элементов управления, и пользователь может обратиться к ним в любой момент. К тому же из тегов HTML сложно создать надежную систему навигации.
Зато при работе с XUL нет необходимости ограничивать себя подобным
плохим интерфейсом. XUL дает программисту возможность избавиться от
вездесущих панелей инструментов браузера, из-за которых пользователь
может нарушить работу HTML-приложения. XUL также предоставляет
программисту возможность более тщательного контроля над самим
процессом работы приложения благодаря использованию сложных и
Может показаться, что XUL по сравнению с HTML - второстепенная
технология. Но это будет большим заблуждением. Каждое окно
классического браузера (и всех остальных браузеров на основе Mozilla)
- приложение, написанное на XUL; даже окошки, всплывающие по вызову alert() - такие приложения. Некоторые окна браузера, например, окно
Навигатора, могут содержать большие области, заполняемые содержимым
других типов (например, HTML-страницами), но каждое окно - прежде
всего, XUL-приложение. Эти окна взаимодействуют с помощью общих
Чтобы понять, как работает XUL в готовом приложении, представим
себе сначала типичные случаи использования HTML. На web-страницах,
написанных на HTML, есть формы, которые можно заполнять и отправлять,
ссылки и динамический HTML. Собственно
Рассмотрим случай XUL. XUL-документ описывает все элементы
графического интерфейса. Предполагается, что эти элементы для чего-то
нужны. Технология XPCOM в Mozilla предоставляет компоненты, с которыми
упомянутые выше графические элементы могут работать. Как и в случае
HTML, содержимое документа и сервисы, предоставляемые браузером,
используются вместе. XPCOM-компоненты обычно более эффективны, чем
Хотя и XUL, и HTML могут идентифицироваться строками с указанием
пространства имен, между ними есть одно ключевое различие. Для XUL не
существует
То есть на самом деле нет точного или обязательного для выполнения соглашения о том, какие XUL-теги существуют. Это делает язык несколько аморфным. Так происходит, потому что каждая из технологий привносит свои теги, и в любой момент могут быть добавлены еще теги. Следовательно, "корректного" XUL-документа просто не существует. Тогда встает другой вопрос: все ли теги в этом документе делают что-то полезное?
Но на самом деле не стоит впадать в такие крайности; существует четко определенный набор основных тегов XUL. Это неплохо для начала, но в целом XUL не так ограничен, как HTML. Изучение XUL-тегов похоже на составление словаря: тег попадает в словарь, если он часто употребляется, независимо от своего происхождения.
В этой лекции рассматривается только статическое отображение информации, то есть статические текст, изображения и эффекты стилей. Работа с кнопками описывается в лекции 4, "Первые элементы управления и темы".
Тег <description> - самый простой способ отобразить на экране
текст. Существуют и другие способы. Полный список полезных тегов для
отображения текста таков:
<description> <text> <label> <stringbundle> <stringbundleset> <caption>
Так как XUL - это XML, всегда имеется возможность использовать обычную функциональность XML. Для текста это сущности и ссылки на них. Некоторые из таких вариантов позволяют строкам храниться в отдельных файлах, так что подобные механизмы также рассматриваются.
Обратите внимание, что XUL-тег <description> и <Description> совершенно различны по значению и никак друг с другом не
связаны.
Тег <description> - рабочая лошадка для отображения обычного текста
без всякой разметки и т.д. Тег <label> не отличается от <description>
ничем, кроме того, что он поддерживает атрибут control. Этот атрибут
связывает текст метки (label - метка) с элементом формы. Чтобы понять,
как это работает, следует прочитать лекцию 6, "События". <label>, в
общем, - более изящный вариант <description>. Тег <text> использует
более простой механизм отображения текста, чем предыдущие два
тега.
<description> и <label> - единственные теги в XUL, в которых
содержимое может переноситься по строкам, если оно слишком объемное.
При переносе для отображения текста используется несколько строк.
Перенос осуществляется на разрывном nbsp;, ссылку на сущность
неразрывного пробела, в случае необходимости нужно пользоваться его
эквивалентом, #160;. Если текст нельзя перенести до достижения
максимальной длины строки (не встретилось ни одного разрывного
символа), пространство, отведенное под тег строки, будет переполнено.
Строка будет обрезана на границе следующего блока с фиксированной
шириной (обычно это край окна). То же может произойти и при изменении
размеров окна.
<description> и <label> могут включать содержимое любого типа, а не
только текст; это могут быть и <box>, и другие XUL-теги. Содержимое
этих тегов также будет переноситься по строкам. Перенос производится и
в том случае, если закрывающий и открывающий теги встречаются внутри
содержимого <description> или <label>. Короче говоря, эти два тега
ведут себя как HTML-тег <P>. <description> также поддерживает один
особый атрибут:
value
<label> поддерживает два особых атрибута:
value crop
У них обоих содержимое может заключаться или между открывающим и
value.
Значениями атрибута start, center или end. По
умолчанию не используется ни одно из них. Если же задано одно из этих
трех значений, перенос строк содержимого <label> больше не будет
осуществляться. При превышении ширины внешнего блока оно будет
обрезаться. При этом будет также освобождаться место для многоточий
( "..." ). Если , многоточие появится в начале содержимого
метки. Если , многоточие появится в конце, а если , оно может появиться и там, и там. Многоточия сообщают
пользователю о том, что дальше есть еще текст, который можно
прочитать.
На эти теги накладываются некоторые ограничения. Во-первых, XUL-
документы состоят из символов 8-битной кодировки, обычно это value, нужно иметь в виду, что не все стили
CSS 2 для текста могут быть применены к этому содержимому. Значением
данного атрибута также не может быть XML- или XUL-разметка, это может
быть только обычный текст. Для наиболее эффективной работы следует
заключать нужное содержимое между открывающим и закрывающим
тегами.
Тег <text> очень похож на два описанных выше тега, но его
содержимое никогда по строкам не переносится. При переполнении оно
может быть обрезано с использованием атрибута . В этом случае он
будет вести себя как тег <label . Поэтому данный тег более
всего важен в меню и панелях инструментов, где временное сжатие окна
может спрятать часть короткой текстовой строки.
<description>, <text> и <label> - настоящие XUL-теги в том смысле,
что они реализованы в C/C++. Они не происходят из дизайнерской
практики, как, например, пользовательский тег <.
В XUL-приложениях Mozilla декларации типов документов используются для замены зависимого от языка текста на более общие сущности.
Синтаксис для
Как пример можно рассмотреть часть nbsp;, так что автору приходится запоминать более непонятную
комбинацию #160;.
Мнемонические сущности могут заменять целые строки (ссылки на
сущности) и отдельные символы (ссылки на символы). Чтобы вспомнить, о
чем идет речь, следует просмотреть еще раз раздел 4.2.2, "Внешние
сущности" ("
<!DOCTYPE html [ ... ]>
позволяет объявлять дополнительные сущности (или любое другое
разрешенное содержимое #include в C/C++ или require в Perl:
<!DOCTYPE html [ <!ENTITY % textDTD SYSTEM "text.dtd"> %textDTD; ] >
Файл text.
<!ENTITY text.welcome "Приветствую вас в своем приложении!">
Использовать такую сущность и в XUL, и в XML можно так:
<description>text.welcome;</description>
или так:
<description value="text.welcome;"/>
Следовательно, с помощью сущностей приложение может быть полностью
переведено на эсперанто, клингонский (Язык героев
Так как эти сущности появляются как значения XML-атрибутов, в них можно хранить и информацию о стилях. Эта возможность используется реже, когда какая-то локализованная версия должна выглядеть не так, как все остальные. Возможно, меню на кантонском диалекте китайского должно быть красным, а приглашение на свадьбу на Западе - белым.
Самое важное в
Mozilla хранит их в файлах .properties, похожих на файлы
.properties в Java. Ближайший их аналог в технологиях Microsoft
Windows - это файлы .ini. Ближайший аналог в UNIX, возможно, strfile(1).
Как уже было сказано, расширение таких файлов со строками - .properties, а их содержимое - строки, удобные для восприятия человеком. Вот пример такой строки:
instruct-last=Для продолжения нажмите "Далее".
Здесь - имя строки, а 'Для продолжения нажмите
"Далее".' - ее значение. Несколько таких строк в одном файле образуют
набор строк - маленькую базу данных, - с которым может работать
приложение Mozilla.
Файлы .properties должны храниться в подкаталоге файлов локализации
расширения
chrome://packagename/local/filename.properties
С точки зрения чистого XUL наборы строк скучны. В листинге 2.3 показано все, что можно с ними делать.
<stringbundleset> <stringbundle id="menus" src="menus.properties"/> <stringbundle id="tips" src="tips.properties"/> <stringbundle id="status" src="status.properties"/> </stringbundleset>
Ни в одном из этих тегов нет видимого содержимого. Вся их работа -
сделать указанные наборы строк доступными для JavaScript-скриптов. Тег <stringbundleset> - даже не настоящий тег, а пользовательский
контейнер, который может содержать теги <stringbundle>. Для обоих
тегов используются стили, чтобы сделать их невидимыми.
Такой set, общеупотребительно. И хотя теги вроде <stringbundleset> ничего не делают, их использование для
группирования однотипных инструкций (тегов <stringbundle> ) - хорошая
привычка в написании кода. Созданный таким образом код выглядит
аккуратно, и его очень легко читать. Рекомендуется всегда объединять
похожим образом наборы невидимых тегов и помещать их в начало XUL-документа.
Когда дело касается наборов строк, в игру вступает JavaScript. Более подробно об этом рассказано в лекции 5, "Скрипты". Кроме того, можно получить прямой доступ к набору строк прямо из кода, не используя содержимое XUL вообще.
Стоит упомянуть, что, помимо всех перечисленных выше способов
получения и отображения текста, скрипты JavaScript и
В HTML имеется тег <IMG>, в XUL имеется тег <image>. Они одинаковы.
Вот фрагмент кода с использованием последнего:
<image src="myimage.jpg"/>
У изображений есть минимальная ширина и высота, совпадающие с
размерами отображаемых изображений. Если к тегу <image> добавить
атрибут , эти минимальные размеры теряются, и изображение может
сжиматься очень сильно. Чтобы сохранить значения минимальных размеров,
нужно добавить правила стиля для высоты и ширины или соответствующие
им атрибуты.
Существует две очень полезные методики работы с изображениями. Обе
они относятся к информации об украшениях окон, хранящейся в файлах
оформления Mozilla. Хотя в XUL и есть тег <image>, изображения,
использующиеся в темах, не должны объявляться таким образом; их
следует указывать в таблице стилей. Стиль с URL изображения может быть
применен к пустому тегу так:
<description class="placeholder"/>
Пример соответствующего стиля:
.placeholder { list-style-image: url("face.gif"); }
Далее. Большое число изображений можно объединить в один файл. Для отображения одного изображения из такого файла можно использовать функции обрезания тегов в CSS:
#foo {-moz-image-region: rect(48px 16px 64px 0px); }
и, похожим образом:
#foo:hover {-moz-image-region: rect(48px 32px 64px 16px); }
С помощью этой методики можно создавать эффект анимации при
наведении курсора мыши на изображение и другие CSS-эффекты. В таких
случаях, когда одно изображение заменяется другим, раньше нужно было
писать
(рис 3.2) Окно Компоновщика с обрезанными изображениями на панели инструментов и оригинальное изображение.С недавних пор в Mozilla поддерживается и формат изображений .
В Mozilla поддерживается широкий диапазон оформлений границ
объектов на базе CSS 2, плюс несколько расширений. Они описываются в
разделе "Альтернатива: таблицы стилей" текущей лекции. Один полностью
стандартный стиль CSS 2, заслуживающий особого внимания, - .
Обычно он используется для того, чтобы создать область на экране, в
которой можно прокручивать статический текст, например, текст лицензии
на ПО. Для этого необходимы два пользовательских тега, один в другом,
а сам текст нужно поместить во внутренний тег. В HTML в качестве
внешнего тега обычно используется <, а в XUL - <box>.
Обратите внимание, что сами эти полосы прокрутки недоступны из скриптов, что не совсем удобно. Такой способ работы со стилями рекомендуется использовать только в том случае, когда состояние полос прокрутки не играет особой роли. По умолчанию в XUL полосы прокрутки CSS 2 видимы всегда.
В XUL есть и лучшие методы работы с полосами прокрутки, в том числе
довольно общий тег <scrollbox>. Более подробно полосы прокрутки
рассматриваются в лекции 8, "Навигация".
Отображение текста - не очень легкий процесс. Чтобы отобразить текст в графическом интерфейсе (на графическом терминале), каждый символ в тексте должен быть преобразован в набор пикселов. Mozilla очень чувствительна к тому, как это делается, и в результате HTML- приложения могут выглядеть и хорошо, и плохо. Большая часть проблем относится к UNIX-платформам. На рисунке 3.3 показана буква A, нарисованная на экране Mozilla в четырех различных случаях.
(рис 3.3) Четыре глифа Mozilla для буквы A в Windows и UNIX.Каждый из этих символов (
{ font-family : Times; font-size : 72pt; }
Правда, значение font-size слегка менялось так, чтобы символы в разных системах были одного и того же размера. Нечеткий рисунок под каждой буквой - нижняя часть левого штриха соответствующей буквы, увеличенная в пять раз. Очевидно, что для наилучшего представления символов нужно найти и изменить правильные настройки.
На рисунке символы (1) и (2) взяты из Microsoft Windows, а символы
(3) и (4) - из UNIX, где использовалась система X-Windows, основная
технология отображения графики для UNIX/Linux. Сразу бросается в
глаза, что в разных операционных системах у букв разные формы. Это
произошло потому, что использовались, по крайней мере, три варианта
шрифта Times: в Windows -
Два варианта буквы A в Windows отличаются друг от друга только
процессом прорисовки. На панели управления (. В первом
случае он был снят, а во втором установлен. Этот флажок отвечает за
включение сглаживания шрифтов. В терминах Microsoft это также
называется субпиксельной точностью.
Что такое сглаживание? В первую очередь, это процесс выборки
. В этой системе
В вариантах отображения A в системе UNIX для обоих --enable-xft. По умолчанию Mozilla для UNIX собирается без
этого параметра. Стандартная сборка Mozilla 1.0 отображает букву A не
лучше, чем стандартная сборка Mozilla 1.2.1. Почему же очевидно лучший
вариант не станет стандартным?
Эта дополнительная поддержка X отключена по умолчанию из
соображений производительности. Эти соображения довольно сложны и
связаны с архитектурой X-Window. Система X-Window работает следующим
образом: программы отправляют инструкции определенному X-серверу
(например,
Производительность же упоминается потому, что версия Mozilla,
скомпилированная с параметром --enable-xft, в любом случае будет
использовать
Правда, эта замена символов изображениями не всегда критична. В
системе X-Window есть и свои проблемы с производительностью, по
сравнению с которыми беды Mozilla просто ничтожны. Понимание того, как
работает X11, поможет решить, стоит ли включать в Mozilla поддержку
В современных X-приложениях вроде Mozilla, GIMP и OpenOffice
содержится большое число пиктограмм, кнопок и других элементов-
подсказок графического интерфейса. Система X11 изначально
проектировалась для черно-белых мониторов (один бит на один пиксел),
но сейчас мониторы позволяют использовать 8, 24 и даже 32 бита на
пиксел. Следовательно, изображения применяются все чаще и становятся
все больше. Объем информации, передаваемой между X-сервером и его
клиентами, все больше зависит от этих изображений, примерно так же,
как довольно значительную часть передаваемой из Internet информации
также составляют изображения. Если Mozilla работает в таком окружении,
то, передавая дополнительные изображения, вы вряд ли заметите большую
разницу. В этом случае можно включить поддержку
Если же сама система X11 использует немного изображений или
работает на не очень быстром соединении, тогда поддержка
Для интеграции с менеджерами рабочего стола Mozilla 1.0–1.4
основывается на библиотеке графических элементов управления GTK 1.x,
которая работает поверх X-Windows. Существующие улучшения X будут
работать в GNOME 2.0 или KDE и их более поздних версиях, так как
старые версии этой библиотеки есть и в них. Следовательно, сборка
Mozilla с расширением
Тем, кто заинтересовался шрифтами в UNIX, еще придется изучить
очень многое. Можно начать поиск с нескольких разных мест. Руководство
по файлам шрифтов - стандартный сборник вопросов и ответов,
поставляющийся вместе с большинством Linux-систем; твипы (
Наконец, существует еще одна проблема: отображение шрифтов в стандартной сборке Mozilla чрезмерно грубое, как видно из рисунка 3.3. Простое решение - загрузить дополнительные шрифты. В руководствах по работе со шрифтами в Linux очень много ссылок на шрифты. Mozilla может выглядеть красиво даже с обычными растровыми шрифтами (самыми примитивными). Для этого на компьютере должны быть установлены растровые шрифты всех размеров, которые используются в ваших web-документах. Создать такие шрифты без соответствующего опыта довольно сложно. Mozilla не поддерживает встраиваемые шрифты (они загружаются из Internet вместе с документом).
Можно не компилировать Mozilla самостоятельно, а загрузить сборку с
параметром --enable-xft в виде
Основные расширения для оформления в Mozilla относятся к модели представления документа в виде блоков из CSS 2. Эта модель описывает, как блоку с содержимым можно присвоить прямоугольную границу. К этой границе уже можно применить простые стили линий. Mozilla поддерживает границы ,принятые в CSS 2, однако некоторые стили для них не работают.
Расширения Mozilla позволяют создавать даже еще более интересные
границы. У границ могут быть не только прямые углы, и они бывают
разных цветов. Границы вдоль
| Свойство или селектор | Значения | Описание |
|---|---|---|
-moz-border- |
Как и для внешних полей, можно использовать только значения в пикселах | Определяет скругленность углов границы или контура |
-moz-border- |
В пикселах | Скругленность или спрямленность одного заданного угла границы. Одноцветные границы искривляются, у многоцветных линии образуют скошенный угол |
-moz- |
Список цветов, ключевое слово "transparent", особые значения цвета CSS 2 | Цвета для одной заданной стороны границы. Можно указывать любое число цветов, каждому из них будет выделена полоска шириной в пиксел. Последний цвет заполняет оставшееся свободное место, если оно есть |
Эти расширения требуется пояснить. В Mozilla есть два независимых расширения стилей границ, вместе они не работают. В листинге 3.3 приведены этих расширений.
#box1 {
border:solid thick;
border-width:20px; margin:20px; padding:20px;
border-color:gray;
-moz-border-radius-topright: 20px;
-moz-border-radius-bottomright: 40px;
}
#box2 {
border:solid thick;
border-width:20px; margin:20px; padding:20px;
border-top-color : gray;
-moz-border-right-colors :
#000000 #101010 #202020 #303030
#404040 #505050 #606060 #707070
#808080 #909090 #A0A0A0 #B0B0B0
#C0C0C0 #D0D0D0 transparent #000000;
-moz-border-bottom-colors :
#000000 #101010 #202020 #303030
#404040 #505050 #606060 #707070
#808080 #909090 #A0A0A0 #B0B0B0
#C0C0C0 #D0D0D0 transparent #000000;
}
С помощью первого расширения мы получим скругление углов, но
граница должна быть сплошного цвета. При этом поддерживаются некоторые
стили границ из CSS 2 (например, double ), но не все. Второе расширение
позволяет раскрашивать границы в разные цвета. В этом случае граница
рисуется как несколько концентрических линий шириной в один пиксел.
Каждая линия рисуется своим цветом, цвета берутся из заданного списка.
Рисование начинается с
Используя эти расширения, можно получить "зубчатые", неодинаковые углы границ, но это следствие плохого кода на XUL, а не фундаментальная ошибка в Mozilla.
Некоторые из этих стилей также применимы к контурам из CSS 2. Поддержка контуров в Mozilla описывается в лекции 7, "Формы и меню".
Mozilla также содержит расширения стилей для изображений. Свойство , упоминавшееся ранее, - не расширение, а стандартное
свойство CSS 2. Список расширений приведен в таблице 3.2.
(рис 3.4) Пример собственных стилей Mozilla.| Свойство | Значения | Описание |
|---|---|---|
-moz-background- |
border, |
Поддержка ограничения фона согласно еще не законченному CSS 3. Mozilla 1.2+ |
-moz-background-origin |
order, |
Поддержка начальной точки фона согласно еще не законченному CSS 3. Mozilla 1.2+ |
-moz-force- |
1=true, 0=false |
Показывать пиктограмму "не удалось загрузить изображение" вместо самого изображения |
-moz-image-region |
Как и для |
Показывать только часть изображения |
Помимо упомянутых выше расширений существуют и такие, которые могут применяться практически ко всем тегам, а не только к определяющим конкретное содержимое или особую разметку. Они перечислены в таблице 3.3.
| Свойство | Значение | Описание |
|---|---|---|
| Любое свойство | -moz-initial |
Установить в качестве значения этого свойство то, которое использовалось бы по умолчанию, если бы не было наследования |
| Большинство свойств | inherit |
То же, что и в HTML/XHTML |
| Любое свойство шрифта | См. раздел "Альтернатива: таблицы стилей" лекции 10, "Окна и панели". | |
| Любое свойство цвета | Системные цвета | См. раздел "Альтернатива: таблицы стилей" лекции 10, "Окна и панели". |
-moz- |
none или url() |
Использовать для тега указанную связь XBL. См. лекцию про XBL |
-moz- |
От 0.0 до 1.0 | Сделать содержимое полупрозрачным - то же, что и |
Обратите внимание, что XUL не поддерживает стиль CSS 2 . С его помощью можно зачеркивать или подчеркивать
текст.
На момент написания этого курса стандарт CSS 3 еще находился в
стадии разработки, и в Mozilla реализована только частичная его
поддержка. В CSS 3 будет включена модель
В разделе "Практика" мы заполним текстом ту структуру диалога, которую создали в прошлый раз. Мы также выясним, как применять различные локализации, хотя они и не используются в NoteTaker.
Разметка - это тоже содержимое, но оно невидимо для пользователя. Настоящее содержимое, информация для пользователя, видимо. Стандартный текст, штамп - текст на панели окна, который никогда не меняется. Слово "штамп" пришло из истории печати и также будет использоваться нами в проектировании форм. Нашей стратегией будет включить достаточно текста для внятного снимка окна. Нам придется сделать что-то очень быстро - то, что мы потом бросим на растерзание пользователям, аналитикам и специалистам по пользовательским интерфейсам. Им наверняка почти все не понравится, и многое придется выкинуть. Предоставляя ранний черновик интерфейса, мы теряем только часы, а не недели работы. В идеале все это должно случиться до стадии написания спецификации проекта - к тому времени все части окна уже должны быть определены и закреплены на своих местах.
Так как мы еще не знаем ни одного элемента управления, содержательная часть этого диалога будет довольно-таки простой. Всюду, где должен быть элемент управления, у нас будет вместо заглушки пустой блок с видимой границей. В листинге 3.4 показан фрагмент содержимого, добавляемого к разметке.
<text value="Edit"/> <text value="Keywords"/> <description>Summary</description> <box/> <description>Details</description> <box flex="1"/> <caption label="Options"/> <description>Chop Query</description> <description>Home Page</description> <caption label="Size"/> <description>Width</description> <description>Height</description> <description>Top</description> <description>Left</description> <box/> <box/> <box/> <box/> <description>px</description> <description>px</description> <description>px</description> <description>px</description> <text value="Cancel"/> <spacer flex="1"/> <text value="Save"/>
Как видите, все это достаточно тривиально. Обратите внимание, что
для текста, заменяющего команды используется тег <text>, а для текста,
заменяющего инструкции, используется <description>. Внимательно
прочитав текст для вставки в черновик, мы нашли и исправили ошибку: Bottom нужно заменить на Left, так как содержательные элементы
позиционируются с помощью атрибутов стиля top и left.
Результат добавления текста показан на рисунке 3.5.
(рис 3.5) Первый черновик диалога NoteTakerОстается только подправить стили так, чтобы исчезли ненужные
Еще мы могли бы сделать NoteTaker доступным для локализации, чтобы
его интерфейс можно было перевести на разные языки. Для этого мы будем
использовать
В своем проекте вам, возможно, захочется добавить поддержку локализации. Делается это так. Прежде всего, весь статический текст из XUL-файла должен быть заменен ссылками на сущности, как в обычном XML. Это значит, что тег вроде
<text value="Cancel"/>
будет заменен мнемонической ссылкой на сущность вроде такой:
<text value="editDialog.cancel"/>
В этой лекции мы определили весь статический текст, поэтому
изменения очевидны. Сущность editDialog.cancel должна быть объявлена и
определена в
<!ENTITY editDialog.cancel "Cancel">
Так что все просто. Только нужно помнить, что текст в
chrome/notetaker/locale/en-US/edit.dtd
Если это русский файл, следует просто заменить en-US на ru-RU. Имя
файла, edit.
<!DOCTYPE window>
на
<!DOCTYPE window [ <!ENTITY % editDTD SYSTEM "chrome://notetaker/locale/edit.dtd"> %editDTD; ]>
Обратите внимание, что в этом URL
chrome://notetaker/locale/en-US/edit.dtd
Именно туда мы будем складывать все файлы с текстом интерфейса и вообще зависимые от языка файлы. Но на самом деле это еще не полностью измененный URL, он только показывает, как подставляется код текущего языка интерфейса. Полностью измененный URL будет таким:
resource://chrome/notetaker/locale/en-US/edit.dtd
Наконец, мы хотим, чтобы платформа "знала" о том, что эти зависимые
от языка файлы доступны и что их можно использовать в NoteTaker. Иначе
Mozilla просто не будет обращать на них внимания. Чтобы объявить
наличие поддержки какого-то языка, в каталог этого языка нужно
добавить файл contents.
<?xml version="1.0"?>
<RDF
xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:chrome="http://www.mozilla.org/rdf/chrome#">
<Seq about="urn:mozilla:locale:root">
<li resource="urn:mozilla:locale:en-US"/>
</Seq>
<Description about="urn:mozilla:locale:en-US">
<chrome:packages>
<Seq about="urn:mozilla:locale:en-US:packages">
<li resource="urn:mozilla:locale:en-US:notetaker"/>
</Seq>
</chrome:packages>
</Description>
</RDF>
Этот файл можно использовать для любого языка, просто заменив en-US
на код нужного языка, а notetaker - на имя соответствующего
приложения. Пока примите его как данность и не вникайте в его
структуру. Подробнее <Description> можно опустить, если файлы языка
уже объявлены где-то в
После создания этого файла обновим файл installed-
locale,install,url,resource:/chrome/notetaker/locale/en-US/
Так платформа узнает, что поддержка данного языка существует, а
пересохранение файла предписывает платформе просмотреть содержимое
В этой системе поддержки языков также возможно отслеживание версий.
Информация о версии локализации может находиться в файлах contents.
Инспектор
Чтобы запустить Инспектор, нужно выбрать Инструменты | web-разработка |
Инспектор в окне Навигатора. В открывшемся окне
программы следует выбрать Файл | Исследовать окно, а затем - любое
окно из списка, кроме того, что называется "Инспектор Правка | Настройки... и убедиться, что
флажок "Подсвечивать выбранный элемент" установлен, а значение
"Длительность подсветки" - не меньше 2500 миллисекунд (для
новичков).
Пользоваться большей частью команд из меню Инспектора очень просто.
Самые важные кнопки, на которые приходится будете часто нажимать, -
две маленькие пиктограммы, каждая из которых находится в верхней части
одной из больших панелей Инспектора. Рисунок на них напоминает
пиктограммы окон в Windows Explorer в режиме отображения маленьких
значков. Щелкнув по этим пиктограммам, можно открыть выпадающие меню.
Из левого меню нужно выбрать Узлы
(рис 3.6) Разбор окна Навигатора, отображающего HTML, в Инспекторе DOMНа панели слева показана полная иерархия элементов XML,
составляющих окно Mozilla, в виде дерева. Так как все окна Mozilla
написаны на XUL, это иерархия XUL-тегов. В некоторых окнах, например
окнах Навигатора, есть и HTML-теги. Можно проходить по дереву вглубь,
просто выбирая нужные ветки, или щелчком выделить один нужный тег.
Выделив тег, мы видим, что соответствующий ему графический объект в
его окне подсвечивается красным. Если тег невидим, тогда мигает только
линия, вертикальная или горизонтальная. Панель слева обычно делится на
три колонки: nodeName, id и class. Можно добавлять и другие колонки,
щелкнув по кнопке выбора колонок справа вверху.
На панели справа отображается один из специализированных наборов данных о выделенных тегах из левой панели. Здесь также можно выбирать колонки для отображения. Например, выбрав панель Вычисляемые стили, мы увидим стили выбранного тега после применения всех правил CSS 2 и наследования. Это действительные стили тега - то, как он выглядит на экране.
Кружки на снимке окна показывают те элементы управления Инспектором
, не нажимайте на нее, иначе рискуете "подвесить"
платформу прежде, чем закончите работу.
Самая простая цель использования Инспектора
Другое очевидное применение Инспектора – обучение. Вы сможете
подробно разобрать все XUL-приложения, составляющие классический
браузер, да и вообще любой продукт на основе Mozilla. Так можно многое
узнать о том, как программисты Mozilla создавали стандартное
наполнение
Самое простое, что можно сделать с помощью XUL - отображать
статические текст и изображения. Добавлять такие данные очень легко.
Тег <description> предоставляет полезную возможность переноса строк
текста, но обычно он используется для отображения небольших частей
текста. Использование изображений и стилей в XUL очень похоже на их
применение в HTML. И в XUL, и в HTML можно использовать расширения
Mozilla по отображению границ, кроме того, в Mozilla есть и другие
расширения стилей, причем некоторые из них предназначены только для
содержательных тегов, а некоторые - для тегов, определяющих визуальную
структуру документа.
XUL без графических элементов управления вряд ли более полезен, чем HTML. В следующей лекции речь пойдет о том, как добавлять наиболее часто используемый элемент управления, кнопку. Также в четвертой лекции, "Первые элементы управления и темы", мы попробуем улучшить внешний вид нашего приложения.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.