|
|
Изменение пользовательского интерфейса SeaMonkey (Mozilla) редактированием XUL-файлов
-
Дополнительно к стандартным настройкам и редактированию через userChrome.css, есть чуть более сложный способ редактирования интерфейса Мозиллы. Он доступен любому, владеющему HTML и CSS. Собственно, интерфейс Мозиллы — это своего рода локальный сайт, запакованный в архивные файлы .jar, только странички этого «сайта» сделаны на языке XUL (зул).
На этой странице даны примеры с кратким описанием, — этого достаточно для дальнейших самостоятельных экспериментов, не требующих знания XUL. Все варианты изменений описывать не возьмусь, — здесь приведены только некоторые из моей практики. Надеюсь, они окажутся полезными.
Тех, кто ищет подробных инструкций по языку XUL, отсылаю на страничку «Разработка» — там есть масса ссылок на капитальные специализированные ресурсы, посвящённые XUL.
-
Мне известны три способа внесения изменений в файлы, отвечающие за внешний вид Мозиллы.
- Скопировать нужный архивный файл .jar во временную папку, полностью распаковать его архиватором, изменить что хотелось, запаковать, скопировать обратно (предварительно переименовав исходный оригинальный файл на случай неудачных экспериментов).
- Открыть непосредственно исходный оригинальный архивный файл .jar в архиваторе (например, в WinRAR), перемещаясь внутри архива, найти нужный текстовый файл (например, .xul) , открыть его в ассоциированном текстовом редакторе (например, EmEditor), изменить что хотелось, сохранить в текстовом редакторе (если предполагаются последовательные пробы, то удобнее не закрывать текстовый редактор, чтобы оставалась возможность оперативно отменить изменения (откат, undo - redo), подтвердить обновление архивного файла в архиваторе.
- Открыть непосредственно исходный оригинальный архивный файл .jar в архиваторе (например, в WinRAR), перемещаясь внутри архива, найти нужный текстовый файл (например, .xul) , извлечь (скопировать) во временную папку из архивного файла .jar только этот файл .xul , изменить в нём что хотелось, добавить файл .xul с заменой обратно в архивный файл .jar Во временной папке, в этом варианте, по ходу работы можно сохранять версии изменяемого файла.
В любом случае, лучше бы «до того» сохранить копии оригинальных файлов .jar — если изменения будут неудачными — достаточно вернуть исходный файл на место и всё заработает как раньше. Мозилла не должна быть открыта в момент применения изменений.
Изменение функций стандартных кнопок
-
На любую стандартную (имеющуюся в любой шкурке) кнопку можно назначить другую команду. То есть, кнопка будет выглядеть как и раньше, а действовать так, как вы захотите. Вариант — исходная кнопка остаётся на месте, но, в то же время, создаётся её дубль с новыми функциями.
Все стандартные и вновьсозданные кнопки перемещаются простым перетаскиванием соответствующих тегов внутри файла navigator.xul (где находится код панели инструментов) и файла navigatorOverlay.xul (где находится код панели меню).
-
Код каждой кнопки заключён в теги <toolbarbutton></toolbarbutton> Распознаётся конкретная кнопка по идентификатору id="" в открывающем теге <toolbarbutton>.
Панель инструментов состоит из трёх блоков:
- Между тегами <hbox id="nav-bar-buttons"></hbox> находятся кнопки back, forward, reload, stop.
- Между тегами <hbox id="nav-bar-inner" flex="1"></hbox> находится адресная строка и кнопки go-button, search-button, print-button
- Между тегами <hbox id="throbber-box" align="center"></hbox>находится троббер — картинка, оживающая при загрузке страницы.
- Между тегами <hbox id="window-controls" hidden="true" fullscreencontrol="true"></hbox> находятся кнопки окна браузера в полноэкранном режиме minimize-button, restore-button, close-button.
Кнопки панели инструментов в файле
C:\Program Files\Mozilla\chrome\comm.jar\content\navigator\navigator.xul
<toolbarbutton id="back-button"
<toolbarbutton id="forward-button"
<toolbarbutton id="reload-button"
<toolbarbutton id="stop-button"
<button id="go-button"
<button id="search-button"
<toolbarbutton id="print-button"
<button id="navigator-throbber"
<toolbarbutton id="minimize-button"
<toolbarbutton id="restore-button"
<toolbarbutton id="close-button"
-
Для примера, создадим (продублируем) ещё одну кнопку «Print» («Печать») с новыми функциями и разместим её, например, первой слева на панели инструментов. Внешне новая кнопка повторит исходную, но по клику на ней, будет выполняться другая команда.
Находим в файле
C:\Program Files\Mozilla\chrome\comm.jar\content\navigator\navigator.xul
код «родной» кнопки «Print»
<toolbarbutton id="print-button" type="menu-button" class="toolbarbutton-1"
label="&printButton.label;"
oncommand="if (event.target==this) NSPrint();"
tooltiptext="&printButton.tooltip;">
<menupopup id="printMenu">
<menuitem id="printMenuItemToolbar" label="&printCmd.label;"
accesskey="&printCmd.accesskey;"
default="true" oncommand="NSPrint()"/>
<menuitem id="printPreviewMenuItemToolbar" label="&printPreviewCmd.label;"
accesskey="&printPreviewCmd.accesskey;"
oncommand="setTimeout(BrowserPrintPreview, 0);"/>
</menupopup>
</toolbarbutton>
Копируем этот кусок кода, меняем команды (oncommand="" или command="") и содержание текстовых кнопок (label="") на нужные нам, например:
<toolbarbutton id="print-button" type="menu-button" class="toolbarbutton-1"
label="SaveAs"
oncommand="saveDocument(window._content.document);">
<menupopup>
<menuitem label="Preferences"
oncommand="goPreferences('navigator',
'chrome://communicator/content/pref/pref-navigator.xul', 'navigator')"/>
<menuitem label="Page info"
oncommand="BrowserPageInfo();"/>
</menupopup>
</toolbarbutton>
и добавляем в том же navigator.xul после открывающего тега контейнера "nav-bar-buttons":
<hbox id="nav-bar-buttons">
На саму кнопку в этом примере назначена команда «Save As», на два пункта выпадающего меню — «Preferences» и «Page info».
Родную кнопку «Print» можно оставить на своём месте (новая кнопка не влияет на функциональность родной кнопки) или удалить.
Изменение функции расширения «Home Button»
-
Расширение «Home Button» добавляет кнопку «Home» со стандартной функцией — открытием домашней страницы браузера. На эту новую кнопку можно назначить любую другую команду, например, View Source, он же просмотр HTML, он же Page Source, в общем, открытие страницы в текстовом редакторе. Последовательность действий:
- Устанавливаете расширение «Mozex», в нём в настройках назначаете на просмотр страниц нужный редактор. Перезапускаете Мозиллу.
- Устанавливаете расширение «Home Button» в профиль (тогда самодельная кнопка будет действовать только в том профиле, в который установлено расширение), оно выведет дополнительную кнопку home в позицию слева от адресной строки. Закрываете Мозиллу.
- В папке chrome профиля находите файл home.jar
- Копируете home.jar во временную папку для экспериментов.
- Распаковываете home.jar программой-архиватором.
- Заходите в папку content, находите файл homeOverlay.xul
- Открываете файл homeOverlay.xul в любом простом текстовом редакторе (Блокноте).
- Находите команду: oncommand="BrowserHome(event);"
- Меняете на oncommand="mozexViewPageSource()"
- После изменения, сохраняете файл homeOverlay.xul
- Запаковываете папки content и skin как архив .zip с именем home.zip
- Копируете home.zip в папку chrome профиля.
- Исходный файл home.jar переименовываете в home-original.jar
- Файл home.zip переименовываете в home.jar
- Запускаете Мозиллу - проверяете работоспособность.
Точно так же можно на эту кнопку назначить какую-то другую функцию.
- Home Button
- http://3rdhand.info/mozilla/home/en.xhtml
- Домашняя страница расширения.
- http://3rdhand.info/mozilla/home/home.xpi
Добавление собственной кнопки-изображения на панель инструментов
-
Для примера, это будет кнопка с командой «Open File» («Открыть файл»).
В файле
C:\Program Files\Mozilla\chrome\comm.jar\content\navigator\navigator.xul
после:
<hbox id="nav-bar-buttons">
добавить
<toolbarbutton id="mybutOpen"
label="Open"
tooltiptext="Open File"
command="Browser:OpenFile"/>
Картинка для кнопки может быть какой угодно, но желательно в формате GIF или PNG с прозрачностью. Размер зависит от используемой темы. Для темы Pinball подходящий размер 20x20 px. В файле userChrome.css укажите место на диске, где находится картинка. Для оживления кнопки при наведении и нажатии, картинок должно быть три. Или две — для состояния «active» можно использовать или ту же картинку, что и для «hover», или исходную.
#mybutOpen{
list-style-image: url("n.png") !important;
max-width:31px !important;
margin-left:2px !important;
padding:0 3px 0 3px !important;
}
#mybutOpen:hover{
list-style-image: url("h.png") !important;
}
#mybutOpen:active{
list-style-image: url("a.png") !important;
}
Добавление собственной кнопки-изображения на панель меню
-
Для примера, это будет кнопка с командой «Save As» («Сохранить как») в крайней левой позиции на панели меню.
в файле
C:\Program Files\Mozilla\chrome\comm.jar\content\navigator\navigatorOverlay.xul
после
<!-- Menu -->
<menubar id="main-menubar" class="chromeclass-menubar">
вставить
<toolbarbutton id="mybutSave"
label="SaveAs"
tooltiptext="Save As"
oncommand="saveDocument(window._content.document);"/>
Добавление новых текстовых меню на панель меню
-
Чтобы справа от меню «Help» («Справка») на свободном пространстве панели меню появились новые текстовые пункты меню или новые меню с вложенными подпунктами
в файле
C:\Program Files\Mozilla\chrome\comm.jar\content\navigator\navigatorOverlay.xul
найдите строчку, относящююся к меню «Help»
<menu accesskey="&helpMenuCmd.accesskey;" id="menu_Help"/>
и сразу за ней добавьте теги необходимых Вам элементов.
Надпись в кавычках label="" будет выведена как пункт меню. tooltiptext="" — всплывающая подсказка.
Адрес сайта или локальной страницы следует ввести в кавычки loadURI('')
Все примеры даны для английской версии Мозиллы. Для того, чтобы новые надписи в элементах интерфейса выводились по-русски, - перед редактированием файлов XUL переключите текстовый редактор на кодировку уникод UTF-8, а по завершении редактирования — сохраните в ней. Код меню и вложенных меню находится в файлах:
C:\Program Files\Mozilla\chrome\comm.jar\content\navigator\navigatorOverlay.xul
C:\Program Files\Mozilla\chrome\comm.jar\content\communicator\utilityOverlay.xul
-
Примеры — подпункты существующих меню:
«Copy» («Копировать»)
<menuitem label="copy" command="cmd_copy"/>
Select All («Выделить всё»)
<menuitem label="select all" command="cmd_selectAll"/>
File Bookmark ()
<menuitem label="add Bookmark" oncommand="addBookmarkAs();"/>
«PageSource» («»)
<menuitem label="PageSource" command="View:PageSource"/>
«Source» («Код») — при установленном расширении mozex
<menuitem label="Source" oncommand="mozexViewPageSource();"/>
«Open File» («Открыть файл»)
<menuitem label="Open File" command="Browser:OpenFile"/>
«Find» («»)
<menuitem label="Find" command="Browser:Find"/>
«FindAgain» («»)
<menuitem label="FindAgain" command="Browser:FindAgain"/>
«FindPrev» («»)
<menuitem label="FindPrev" command="Browser:FindPrev"/>
«Print» («Печать»)
<menuitem label="Print" command="Browser:Print"/>
«EditPage» («») — Открыть страницу в Компоновщике
<menuitem label="EditPage" command="Browser:EditPage"/>
«Search» («»)
<menuitem label="Search" oncommand="BrowserSearchInternet();"/>
«Translate» («»)
<menuitem label="Translate" oncommand="Translate();"/>
Пример — пункт меню, открывающий заданный сайт:
<menuitem label="Fotoleto" oncommand="loadURI('http://fotoleto.ru/');"/>
Пример — пункт меню, открывающий локальный файл:
<menuitem label="Test"
oncommand="loadURI('C:\Program Files\Mozilla\res\samples\test2.html');"/>
Пример — пункт меню, открывающий в табе менеджер закладок:
<menuitem label="Bookmarks"
oncommand="loadURI('chrome://communicator/content/bookmarks/bookmarksManager.xul');"/>
Пример — новое меню с вложенными подпунктами
<menu label="Foto">
<menupopup>
<menuitem label="Fotoleto" oncommand="loadURI('http://fotoleto.ru/');"/>
<menuitem label="Fotoalbum"
oncommand="loadURI('http://fotoleto.ru/fotoalbum/index.html');"/>
<menuitem label="Fotoleto - Fotowww"
oncommand="loadURI('http://fotoleto.ru/fotowww/index.html');"/>
</menupopup>
</menu>
Пример — новое меню, содержащее вложенные подменю с вложенными подпунктами - закладками:
<menu label="Mozilla">
<menupopup>
<menu label="Mozilla.Org">
<menupopup>
<menuitem label="mozilla.org - SeaMonkey"
oncommand="loadURI('http://www.mozilla.org/projects/seamonkey/');"/>
<menuitem label="wiki.mozilla.org - SeaMonkey"
oncommand="loadURI('http://wiki.mozilla.org/wiki/SeaMonkey:Home_Page');"/>
<menuitem label="mozilla.org - Mozilla Suite"
oncommand="loadURI('http://www.mozilla.org/products/mozilla1.x/');"/>
</menupopup>
</menu>
<menu label="Mozilla.Ru">
<menupopup>
<menuitem label="Mozilla.Ru" oncommand="loadURI('http://mozilla.ru/');"/>
<menuitem label="Forum."
oncommand="loadURI('http://forum.mozilla.ru/');"/>
<menuitem label="Forum - SeaMonkey"
oncommand="loadURI('http://forum.mozilla.ru/viewforum.php?id=10');"/>
</menupopup>
</menu>
</menupopup>
</menu>
-
Пункты меню, вынесенные на панель меню могут быть "оживлены" через userChrome.css
Например, так:
/* стилизует подменю, вынесенные на панель меню */
menubar [label="Open"],
menubar [label="File Bookmark"],
menubar [label="Copy"],
menubar [label="Select All"]{
background: #ddd !important;
padding: 0 0 1px 0 !important;
border:1px solid #bbb !important;
margin:0 4px 0 4px !important;
}
menubar [label="Open"]:hover,
menubar [label="File Bookmark"]:hover,
menubar [label="Copy"]:hover,
menubar [label="Select All"]:hover{
background: #424f81 !important;
padding: 0 0 1px 0 !important;
border:1px solid #bbb !important;
margin:0 4px 0 4px !important;
}
Любые другие пункты меню добавляются в список
Добавление новых текстовых кнопок на панель меню
-
<button label="SaveAs"
oncommand="saveDocument(window._content.document);"/>
Редактирование контекстного меню расширения на примере MozEX
-
После установки MozEX, в новом подменю контекстного меню Мозиллы появляются 10 строчек в заданном автором порядке. Если они все не используются, или не устраивает последовательность расположения команд, или не удобно то, что приходится долго пробираться в подменю, — просто переделайте контекстное меню расширения под себя.
- Устанавливаете mozex.xpi в профиль.
- После установки расширения, заходите в папку chrome профиля, находите файл mozex.jar
- Копируете mozex.jar во временную папку для экспериментов.
- Распаковываете mozex.jar программой-архиватором (.jar это, на самом деле, zip-архив).
- Заходите в папку content, затем в папку mozex, находите файл mozex.xul
- Открываете файл mozex.xul в любом простом текстовом редакторе (Блокноте).
- Находите часть кода, непосредственно относящуюся к пунктам контекстного меню:
<popup id="contentAreaContextMenu">
<menu id="mozex-menu" label="mozex" accesskey="x">
<menupopup>
<menuitem id="mozex-page-source" label="View Page Source"
oncommand="mozexViewPageSource()" accesskey="s" />
<menuitem id="mozex-frame-source" label="View Frame Source"
oncommand="mozexViewFrameSource()" accesskey="f" />
<menuseparator />
<menuitem id="mozex-edit-textarea" label="Edit Textarea"
oncommand="mozexEditTextarea()"/>
<menuseparator />
<menuitem id="mozex-link-download" label="Link => Download"
oncommand="mozexDownload()"/>
<menuitem id="mozex-link-mailto" label="Link => Send Email"
oncommand="mozexSendEmail()"/>
<menuitem id="mozex-link-ftp" label="Link => FTP Client"
oncommand="mozexFTPClient()"/>
<menuitem id="mozex-link-irc" label="Link => IRC Client"
oncommand="mozexIRCClient()"/>
<menuitem id="mozex-link-news" label="Link => News Client"
oncommand="mozexNewsClient()"/>
<menuitem id="mozex-link-telnet" label="Link => Telnet Client"
oncommand="mozexTelnetClient()"/>
<menuitem id="mozex-link-ed2k" label="Link => ED2K Client"
oncommand="mozexED2KClient()"/>
<menuitem id="mozex-link-aim" label="Link => AIM Client"
oncommand="mozexAIMClient()"/>
</menupopup>
</menu>
</popup>
8. Удаляете ненужные пункты меню.
Пример-1, оставлены 3 пункта: View Page Source, Link => Download, View Frame Source
<popup id="contentAreaContextMenu">
<menu id="mozex-menu" label="mozex" accesskey="x">
<menupopup>
<menuitem id="mozex-page-source" label="View Page Source"
oncommand="mozexViewPageSource()" accesskey="s" />
<menuseparator />
<menuitem id="mozex-link-download" label="Link => Download"
oncommand="mozexDownload()"/>
<menuseparator />
<menuitem id="mozex-frame-source" label="View Frame Source"
oncommand="mozexViewFrameSource()" accesskey="f" />
</menupopup>
</menu>
</popup>
9. Один пункт меню:
<menuitem id="mozex-page-source" label="View Page Source"
oncommand="mozexViewPageSource()" accesskey="s" />
10. Разделитель:
11. Пример-2, оставлены 2 пункта: View Page Source, Link => Download
Пункты меню перемещены из вложенного меню контекстного меню непосредственно в контекстное меню:
<popup id="contentAreaContextMenu">
<menuitem id="mozex-page-source" label="View Page Source"
oncommand="mozexViewPageSource()" accesskey="s" />
<menuitem id="mozex-link-download" label="Link => Download"
oncommand="mozexDownload()"/>
</popup>
12. Пример-3, добавлены разделители, пункты меню переименованы:
<popup id="contentAreaContextMenu">
<menuseparator />
<menuitem id="mozex-page-source" label="Mozex Source"
oncommand="mozexViewPageSource()" accesskey="s" />
<menuseparator />
<menuitem id="mozex-link-download" label="Mozex Download"
oncommand="mozexDownload()"/>
</popup>
13. После изменений, сохраняете файл mozex.xul
14. Запаковываете папку content как архив .zip с именем mozex.zip
15. Копируете mozex.zip в папку chrome профиля.
16. Исходный файл mozex.jar переименовываете в mozex-original.jar
17. Файл mozex.zip переименовываете в mozex.jar
18. Запускаете Мозиллу - проверяете работоспособность.
- seamonkey1.0-fotoleto.ru.png
- http://fotoleto.ru/seamonkey/seamonkey1.0-fotoleto.ru.png
- Скриншот Seamonkey 1.0 со всеми добавленными кнопками и меню.
Добавлены кнопки: Открыть файл, Сохранить как, Scrapbook, Копировать, Вставить, Выделить всё, Добавить ссылку, Quicknote, Настройки, Editconfigfiles, Исходный код. Добавлены выпадающее меню с выбранными пунктами из других меню и меню со сылками на страницы локальной версии этого сайта. Остальное подправлено в userChrome.css
|